Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Tenho a seguinte combo
<select id="imovel" name="imovel" style="width:150" onchange="return dropdown(this)">
<option value="0">Selecione</option>
<%while not rs.EOF %>
<option value="<%Response.Write(rs("BAIRRO") )%>" <%'=selected%>><%Response.Write(rs("BAIRRO"))%></option>
<%rs.MoveNext
wend
%>
</select>
Eu quero justamente pegar o valor bairro desse combo para mostrar numa <table> todos os bairros cadastrados.
O problema é que quando o bairro tem uma palavra só (Ex.: Copacabana) funciona, mas quando tem duas ou mais vai tudo contatenado (Ex.: Jardim Armando vai como "JardimAmando") e isso dificulta minha busca.
O código da instrução SQL:
n_bairro = request("imovel")
sql = "SELECT autonum, nome, fantasia, endereco, municipio, estado, bairro, cep, ddd, telefone, site " _
& "FROM Cliente " _
& "WHERE Bairro LIKE '%" &n_bairro& "%' " _
& "ORDER BY nome;"
Alguma luz?
você nao tem nenhum Bairro Código que individualize cada bairro ?
Por que dae, no value do Option, você colocava o Bairro_Codigo e quando você fosse pegar a informação na outra página, você fazia um Select, pegando esse Bairro_Codigo, para pegar o Nome do Bairro
select bairro from bairros where bairro_codigo = " & Request.Form("bairro_codigo")>
sempre tive problema com essa linha
<option value="<%Response.Write(rs("BAIRRO") )%>" <%'=selected%>><%Response.Write(rs("BAIRRO"))%></option>
tente fazer assim pra ver o resultado
<select id="imovel" name="imovel" style="width:150" onchange="return dropdown(this)">
<option value="0">Selecione</option>
<%
while not rs.EOF
BAIRRO = rs("BAIRRO")
%>
<option value="<%=BAIRRO%>" <%'=selected%>><%=BAIRRO%></option>
<%rs.MoveNext
wend
%>
</select>
1. quando você exibe o cod fonte o valor do option esta com espaco, ou esta junto?
2. veja o seu js se nao tem um tratamento de espaço na funcao dropdown()
[]s
Não foi... http://forum.imasters.com.br/public/style_emoticons/default/no.gif
1. Quando eu dou um response.write o resultado vem sem espaços.
2. Não sei dizer... eis a função:
function dropdown(imovel){
var comboclienteX = createXMLHTTP();
comboclienteX.open("post", "objcliente.asp", true);
comboclienteX.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
comboclienteX.onreadystatechange=function(){
if (comboclienteX.readyState==4){
document.all.exibe_cliente.innerHTML = comboclienteX.responseText;}}
comboclienteX.send("id_imovel=" + frm1.imovel.value + "&codcidade="+frm1.codcidade.value);
}
Dee, essa é a tabela de Clientes cujos campos são:
Cod
Nome
Endereco
Bairro, etc
Não posso pegar pelo Cod pq senão vai me retornar apenas os detalhes daquele cliente. Preciso pegar pelo bairro pq tem mais de um cliente em cada bairro. Daí eu mostro com um while todos os clientes daquele bairro vindo do combo.
O problema, pelo que vejo, está justamente quando o bairro tem mais de uma palavra. O resultado vem tudo junto e o sql nao consegue localizar quando está tudo junto. Entendeu?
dar um replace nos espaço pelo sinal de + (mais) e veja o que acontece...
valor = replace(texto, " ", "+")
ue, isso esta estranho
ele monta o option sem espaco mesmo sem haver replace???
cola o html montado do select que da problema
>
ue, isso esta estranho
ele monta o option sem espaco mesmo sem haver replace???
cola o html montado do select que da problema
Tedk's o replace não funcionou simplesmente pq não existem espaços em branco a serem substituidos. O valor do select, quando tem mais de uma palavra, retorna tudo junto, entendeu? Eu preciso que retorne exatamente como está cadastrado no banco, com os devidos espaços em branco.
Aqui está o codigo completo do combo.
<!-- #include file="config/conexao.asp"-->
<%
codestado = request("codestado")
codcidade = request("codcidade")
if len(codcidade) then
filtro = " WHERE CIDADES.id_cidade = "&codcidade
else
filtro = ""
end if
call abre_conectar
sql = "SELECT CIDADES.CIDADE, CIDADES.ID_CIDADE, CLIENTE.AUTONUM, CLIENTE.FANTASIA, CLIENTE.MUNICIPIO, CLIENTE.BAIRRO "
sql = sql & "FROM CIDADES INNER JOIN CLIENTE "
sql = sql & "ON CIDADES.CIDADE = CLIENTE.MUNICIPIO "
sql = sql & filtro & " ORDER BY CLIENTE.FANTASIA"
set rs = cnn.Execute(sql)
%>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<select id="imovel" name="imovel" style="width:150" onchange="return dropdown(this)">
<option value="0">Selecione</option>
<%while not rs.EOF
BAIRRO = rs("BAIRRO")
%>
<option value="<%=BAIRRO%>" <%'=selected%>><%=BAIRRO%></option>
<%rs.MoveNext
wend
%>
</select>
</td>
</tr>
</table>olha, peguei seu cod e mudei pela minha tabela e os espaços apareceram normais
<option value="Cabo Frio">Cabo Frio</option>
<option value="Paraty">Paraty</option>
mostre como esta o html sem espaço
>
olha, peguei seu cod e mudei pela minha tabela e os espaços apareceram normais
<option value="Cabo Frio">Cabo Frio</option>
<option value="Paraty">Paraty</option>
mostre como esta o html sem espaço
Não entendi o que você quer que eu mostre...
Vou começar do principio.
Tenho três combos. A combo1 puxa os estados direto do banco. A combo2 é preenchida via ajax de acordo com o valor da combo1. A combo3 é preenchida via ajax de acordo com o valor da combo2.
Por sua vez, de acordo com o valor que eu selecionar na combo3 um div é mostrado com os detalhes.
Aqui está o html direto da página na internet. Note que aparece normal, com os espaços:
<table border="0" cellpadding="0" cellspacing="0">
<tbody><tr>
<td>
<select id="imovel" name="imovel" style="width: 150px;" onchange="return dropdown(this)">
<option value="0">Selecione</option>
<option value="PITUBA">PITUBA</option>
<option value="PARALELA">PARALELA</option>
<option value="CAMINHO DAS ARVORES">CAMINHO DAS ARVORES</option>
<option value="BARRA">BARRA</option>
<option value="BARRIS">BARRIS</option>
<option value="BARRIS">BARRIS</option>
<option value="ITAIGARA">ITAIGARA</option>
<option value="CAMINHO DAS ARVORES">CAMINHO DAS ARVORES</option>
<option value="BARRIS">BARRIS</option>
<option value="PERNAMBUES">PERNAMBUES</option>
<option value="BARRIS">BARRIS</option>
<option value="PARQUE BELA VISTA">PARQUE BELA VISTA</option>
<option value="PITUBA">PITUBA</option>
<option value="NAZARE">NAZARE</option>
<option value="ITAIGARA">ITAIGARA</option>
<option value="CIDADE JARDIM">CIDADE JARDIM</option>
<option value="SAO CRISTOVAO">SAO CRISTOVAO</option>
<option value="BARRIS">BARRIS</option>
<option value="CAMINHO DAS ARVORES">CAMINHO DAS ARVORES</option>
<option value="ITAIGARA">ITAIGARA</option>
<option value="PERO VAZ">PERO VAZ</option>
<option value="FAZENDA GRANDE">FAZENDA GRANDE</option>
<option value="BOCA DO RIO">BOCA DO RIO</option>
</select>
</td>
</tr>
</tbody></table>
E aqui está o código completo de onde vai aparecer os detalhes do valor selecionado no combo3(bairro):
<!-- #include file="config/conexao.asp"-->
<%
codestado = request("codestado")
codcidade = request("codcidade")
id_imovel = request("id_imovel")
call abre_conectar
sql = "SELECT autonum, nome, fantasia, endereco, municipio, estado, bairro, cep, ddd, telefone, site " _
& "FROM Cliente " _
& "WHERE Bairro LIKE '%" &id_imovel& "%' " _
& "ORDER BY nome;"
set rs = cnn.Execute(sql)
%>
<%while not rs.EOF%>
<table width="294" border="0" cellspacing="0" cellpadding="0" class="tahoma_11_515151">
<tr>
<td width="55" height="15" align="right">
<strong>Loja:</strong></td>
<td width="7"> </td>
<td width="232"><%=server.HTMLEncode(rs("FANTASIA"))%></td>
</tr>
<tr>
<td height="15" align="right"><strong>Cidade:</strong></td>
<td> </td>
<td><%Response.Write(rs("MUNICIPIO"))%></td>
</tr>
<tr>
<td height="15" align="right"><strong>Bairro:</strong></td>
<td> </td>
<td><%Response.Write(rs("BAIRRO"))%></td>
</tr>
</table>
<BR />Não liguem para os nomes das variáveis; esqueci de mudar. http://forum.imasters.com.br/public/style_emoticons/default/blush.gif
A variável id_imovel me retorna o valor do combo3, que nesse caso será um bairro da tabela clientes.
Se eu der um response.write logo abaixo de
id_imovel = request("id_imovel"), se tiver selecionado CAMINHO DAS ARVORES, aparecerá CAMINHODASARVORES :angry:
Dessa forma minha instrução SQL vai dizer que não achou os clientes desse bairro, pq está tudo junto... Se o bairro tiver uma palavra só, traquilo.
Não faz sentido... Onde está wally? :wacko:
pedi pra ver o html do option pra ver se o erro era na montagem do select... mas nao é
entao vamos por eliminação pra achar o erro
se você der im .write em id_imovel vai printar BairroSemEspaco, correto?
quando o usuario seleciona o combo, executa a funcao dropdown() que acessa a pagina acima
de um alert(id_imovel) no js pra ver como ele esta recebendo o texto - pra seber se o erro é na passagem do js
>
pedi pra ver o html do option pra ver se o erro era na montagem do select... mas nao é
entao vamos por eliminação pra achar o erro
se você der im .write em id_imovel vai printar BairroSemEspaco, correto?
quando o usuario seleciona o combo, executa a funcao dropdown() que acessa a pagina acima
de um alert(id_imovel) no js pra ver como ele esta recebendo o texto - pra seber se o erro é na passagem do js
Eu dei um alert no js drowpdown e ele me retorna como eu quero, com espaços normais...alert puro não veio nada. Tive que criar a variavel primeiro.
var id_imovel = frm1.imovel.value;
alert(id_imovel);
Não acredito também que o erro esteja no arquivo ajax.js... Será?
function createXMLHTTP()
{
var ajax;
try
{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
try
{
ajax = new ActiveXObject("Msxml2.XMLHTTP");
alert(ajax);
}
catch(ex)
{
try
{
ajax = new XMLHttpRequest();
}
catch(exc)
{
alert("Esse browser não tem recursos para uso do Ajax");
ajax = null;
}
}
return ajax;
}
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"];
for (var i=0; i < arrSignatures.length; i++)
{
try
{
var oRequest = new ActiveXObject(arrSignatures[i]);
return oRequest;
}
catch (oError)
{
}
}
throw new Error("MSXML is not installed on your system.");
}
:wacko:o seu select é imovel apenas?
e voce recupera id_imovel?
tem algum campo id_imovel? ou foi apenas erro de digitação?
esse seu codigo esta muito enrrolado
function dropdown(imovel){
você nao nao usa a var imovel da funcao
comboclienteX.send("id_imovel=" + frm1.imovel.value + "&codcidade="+frm1.codcidade.value);
melhora esse js pra nao correr risco de perder informação na passagem de valores
pq você nao usa jquery?
>
esse seu codigo esta muito enrrolado
function dropdown(imovel){
você nao nao usa a var imovel da funcao
comboclienteX.send("id_imovel=" + frm1.imovel.value + "&codcidade="+frm1.codcidade.value);
melhora esse js pra nao correr risco de perder informação na passagem de valores
pq você nao usa jquery?
Consegui resolver. Acho que não foi caso de nomes na função não usados. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif
Pesquisando na net achei uma função que funcionou; mas nao sei dizer porquê... :unsure:
Essa funcionou (retorna as palavras separadas) http://forum.imasters.com.br/public/style_emoticons/default/joia.gif :
var xmlHttp
function dropdown(imovel)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Este browser no suporta HTTP Request")
return
}
var url="objcliente.asp" // o arquivo que ir executar a SQL das lojas/ Essa func ir exibir o resultado na DIV /
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("exibe_cliente").innerHTML=xmlHttp.responseText
}
}
/ Instancia /
function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}
Essa não funcionou (retorna as palavras juntas) :huh: :
function dropdown(imovel){
var comboclienteX = createXMLHTTP();
comboclienteX.open("post", "objcliente.asp", true);
comboclienteX.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
comboclienteX.onreadystatechange=function(){
if (comboclienteX.readyState==4){// abaixo o texto do gerado no arquivo executa.asp e colocado no div
document.all.exibe_cliente.innerHTML = comboclienteX.responseText;}}
comboclienteX.send("imovel=" + frm1.imovel.value);
}
Valeu.
se você estava disposto a mudar o ajax, iria sugerir usar o jquery que facilita muito no ajax e em varias outras coisas
com jquery fica em torno de umas 5 linhas a passagem do valor com $.post
sempre tive problema com essa linha
<option value="<%Response.Write(rs("BAIRRO") )%>" <%'=selected%>><%Response.Write(rs("BAIRRO"))%></option>
<%tente fazer assim pra ver o resultado
while not rs.EOF
BAIRRO = rs("BAIRRO")
%>
<option value="<%=BAIRRO%>" <%'=selected%>><%=BAIRRO%></option>
<%rs.MoveNext
wend
%>
</select>
1. quando você exibe o cod fonte o valor do option esta com espaco, ou esta junto?
2. veja o seu js se nao tem um tratamento de espaço na funcao dropdown()
[]s