Usuário com melhor resposta
Pegar valor do select

Pergunta
-
Pessoal estou usando a seguinte função
onchange="RetornoAjax(this.value, 'estados.asp', 'estados')"Função:
Code Snippetfunction RetornoAjax(id, url, container)
{
if (id == "")
{
document.getElementById("estados").innerHTML = "";
document.getElementById("cidades").innerHTML = "";
document.getElementById("zona").innerHTML = "";
document.getElementById("profs").innerHTML = "";
return
}
var xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Este browser não suporta HTTP Request")
return
}
var url=url;
url=url+"?id="+id;url=url+"?"+txt (quero o valor aqui);
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById(container).innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}
function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
objXMLHttp=new XMLHttpRequest()
else if (window.ActiveXObject)
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
return objXMLHttp
}
coloquei esse comando em meu java script acima:
var indice = document.form1.cidades.selectedIndex
var txt=document.form1.cidades.options[indice].text
e pegou o valor do país, no select, mas não quero o valor do selecte paises (que é o primeiro select dinâmico), quero o valor do select estado e / ou cidades (que vem depois de acordo com a escolha do país), como faço?
Pois coloquei esse codigo acima na função e dava: é nulo ou não é um objeto, pois só funciona se eu colocar o select pais: document.form1.paises.selectedIndex...
E agora?Esse é onde estão as selects:
***********************************************************************
<form method="POST" action="resultado.asp" name="form1">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Países:</font></td>
</tr>
<tr>
<td width="100%">
<select name="paises" id="paises" onchange="RetornoAjax(this.value, 'estados.asp', 'estados')" style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080">
<option value="">-Selecione-</option>
<% while not tab.eof %>
<option value="<%= tab("id_pais")%>"><%= tab("pais")%></option>
<% tab.movenext
wend
%>
</select></td>
</tr>
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Estados:</font></td>
</tr>
<tr>
<td width="100%"><div name="estados" id="estados"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr>
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Cidades:</font></td>
</tr>
<tr>
<td width="100%"><div name="cidades" id="cidades"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr>
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Zona
(Cidade de São Paulo):</font></td>
</tr>
<tr>
<td width="100%"><div name="zona" id="zona"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr>
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Profissionais:</font></td>
</tr>
<tr>
<td width="100%"><div name="profs" id="profs"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr>
<tr>
<td width="100%">
<input type="submit" value="Buscar" name="B1" style="color: #FFFFFF; font-size: 10 px; font-family: Verdana; border: 1px solid #808080; background-color: #3A5278"></td>
</tr>
</table>
</form>
</td>
</tr>
</table>******************************************************************************
Sabendo que quando eu chamar o select estado depois da escolha do país irá chamar a página estado.asp via script e exibir na div desse código acima... a págia estado é:
Code Snippetid = split(Request.QueryString("id"),"?")
info = id(0)
info1 = id(1)
sql = "select * from estados where id_pais ="& info &" order by estado desc"
set tab = conexao.execute(sql)
%>
<select name="estados" id="estados" onchange="RetornoAjax(this.value, 'cidades.asp', 'cidades')" style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080">
<option value="">-Selecione-</option>
<% while not tab.eof %>
<option value="<%=tab("id_estado")%>"><%=tab("estado")%></option>
<% tab.movenext
wend
conexao.close
set tab = nothing
%>
</select>Então, como fazer eu levar duas variaveis da minha select sem dar valor undefined ou coisa assim?
Pois ao levar o valor do value e o nome mesmo da select , vou jogar em um split na página estado...
Desde já agradeço!
Marcelo
Respostas
-
Marcelo, sua dúvida esta um pouco confusa, me explica uma coisa você tem a seguinte função que faz o trabalho por trás certo, esta função recebe o valor, a pagina que irá processar e o objeto que receberá o conteúdo, certo?
Seu usuário foi e escolheu um estado, o script ffaz a pesquisa e traz os estados correto? Ai o usuário escolhe um estado e você quer que traga as cidades certo?
Então dexiando desta forma abaixo não esta funcionando, é isso?
onchange="RetornoAjax(this.value, 'cidades.asp', 'cidades')"
Pois só aqui já daria certo, a diferença que na página "cidades.asp" você faz o select buscando as cidades de acordo com o id do estado passado no parametro "this.value"
Bom se não for isso, me desculpe, e se possível explique detalhadamente.
Abraços
Estevam
Todas as Respostas
-
Marcelo, sua dúvida esta um pouco confusa, me explica uma coisa você tem a seguinte função que faz o trabalho por trás certo, esta função recebe o valor, a pagina que irá processar e o objeto que receberá o conteúdo, certo?
Seu usuário foi e escolheu um estado, o script ffaz a pesquisa e traz os estados correto? Ai o usuário escolhe um estado e você quer que traga as cidades certo?
Então dexiando desta forma abaixo não esta funcionando, é isso?
onchange="RetornoAjax(this.value, 'cidades.asp', 'cidades')"
Pois só aqui já daria certo, a diferença que na página "cidades.asp" você faz o select buscando as cidades de acordo com o id do estado passado no parametro "this.value"
Bom se não for isso, me desculpe, e se possível explique detalhadamente.
Abraços
Estevam
-
Luiz...
É assim, veja esse site: http://www.sbpi.org.br/profissionaislink.asp la tem uns combos para pesquisar país, estado, cidade e profissão... é nesse modelo
Só que no meu, quando for sair a cidade são paulo eu irei mostrar outro combo exibindo: zona leste, sul, norte e etc...
Mas quando for outras cidades, ele pula esse combo e exibi o próximo, ja que não tem necessidade de zonas...
e fiz esse esquema em cidades:
Code Snippetid = split(Request.QueryString("id"),"?")
info = id(0)
info1 = id(1)
response.write(info1)
response.endsql = "select * from cidades where id_estado ="& id &" and ok <> "& idi &" order by cidade desc"
set tab = conexao.execute(sql)if not tab.eof then
cidadet=tab("ok")if cidadet = "True" then
%>
<select name="cidades" id="cidades" onchange="RetornoAjax(this.value, 'zonas.asp', 'zona')" style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080">
<option value="">-Selecione-</option>
<% while not tab.eof %>
<option value="<%= tab("id_cidade")%>"><%= tab("cidade")%></option>
<% tab.movenext
wend
conexao.close
set tab = nothing
%>
</select><%else%>
<select name="cidades" id="cidades" onchange="RetornoAjax(this.value, this.text, 'profissionais.asp', 'profs')" style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080">
<option value="">-Selecione-</option>
<% while not tab.eof %>
<option value="<%= tab("id_cidade")%>"><%= tab("cidade")%></option>
<% tab.movenext
wend
conexao.close
set tab = nothing
%>
</select>
<%end if
end if%>
Mas é o que você disse mesmo, chama uma função e chama a pagina estado.asp, que depois chama cidade.asp... entendeu?
O this.valeu chama o value do select normal... Mas quero chamar tambem na minha função o nome do select... algo tipo this.text que não funciona, entende?
-
Marcelo, creio que ai o melhor que você tenha a fazer seria criar uma nova função, segue abaixo um exemplo:
function verificaEstado(objEstado)
{
if (objEstado.options[objEstado.selectedIndex].text == "SAO PAULO")
{
// Aqui voce chama a funçao para zonas se o estado for Sao Paulo
RetornoAjax(objEstado.value, 'zonas.asp', 'zona');
}
else
{
// Aqui para outros estados
RetornoAjax(objEstado.value,'outrosestados.asp','cidadesoutrosestados');
}
}
Para chamar a função é só colocar assim no select:
<select ..... onchange="verificaEstado(this);" >
Bom faz um teste.
Abraços
Estevam
-
Mas vai interferir em todo o codigo... todo esquema criado... Pois quando um combo chama o outro lá é com esse script que postei... por isso queria acrescentar... entendeu? Esse script manda para outras paginas .asp as variaveis... se quiser te mando um arquivo e vejo uma maneira para voce abaixar e ver todo o esquema, ele está rodando mas não gera essa opção de zonas...
-
-
Marcelo, na verdade creio que não ia interferir em seu código não, porque é só uma função a mais na qual você define qual procedimento chamar, se chama um já com as cidades ou outro com as Zonas que posteriormente você chamaria as cidades. Mas tudo bem, você comentou que precisar pegar o "text" do campo, a linha marcado em vermelho demonstra como pegar o texto do option selecionado, veja se te ajuda.
obs.: Creio que se você incluir este campo dará mais trabalho, e terá que ser feito um POG no seu script.
O problema é que se você colocar esta linha na função central, enquanto não houver valores eles retornarão como NULL ou indefinido, ai que entra o POG, você vai ter que fazer uma validação por exemplo, na url, se a url que a função esta chamando é de "cidades.asp" por exemplo, ai você busca a cidade e inclui na URL o campo necessário, lembrando que o separador de string na url é & (e comercial), a ? (interrogação) é só tipo para avisar que você esta enviando informações via querystring, ou seja, sua url ficaria mais ou menos assim:
url = url + "?campo1=" + textocampo1 + "&campo2=" + textocampo2
Bom faz um teste e qualquer coisa manda mensagem de novo
Abraços
Estevam
-
Coloquei outra função que você falou e ele disse que document.getElementById(...) é nulo ou não é um objeto e esse document está na outra função...
É assim, a index tem:
****************************************************************************************************************************
<script src="funcoes.js" type="text/javascript"></script>
<script src="funcoes1.js" type="text/javascript"></script><select name="paises" id="paises" onchange="RetornoAjax(this.value, 'estados.asp', 'estados')" style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080">
<option value="">-Selecione-</option>
<% while not tab.eof %>
<option value="<%= tab("id_pais")%>"><%= tab("pais")%></option>
<% tab.movenext
wend
%>
</select></tr>
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Estados:</font></td>
</tr>
<tr>
<td width="100%"><div name="estados" id="estados"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr>
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Cidades:</font></td>
</tr>
<tr>
<td width="100%"><div name="cidades" id="cidades"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr>
<tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Zona
(Cidade de São Paulo):</font></td>
</tr><tr>
<td width="100%"><div name="zona" id="zona"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr><tr>
<td width="100%"><font color="#3A5278" face="Arial Narrow" size="2">Profissionais:</font></td>
</tr>
<tr>
<td width="100%"><div name="profs" id="profs"><select style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080"></select></div></td>
</tr>****************************************************************************************************************************
onde seleciona o combo país e assim chama a função original (que atende outros combos):
função.js:
****************************************************************************************************************************
function RetornoAjax(id, url, container)
{
if (id == "")
{
var txt = "1"
document.getElementById("estados").innerHTML = "<select></select>";
document.getElementById("cidades").innerHTML = "<select></select>";
document.getElementById("zona").innerHTML = "<select></select>";
document.getElementById("profs").innerHTML = "<select></select>";return
}
var xmlHttp=GetXmlHttpObject()if (xmlHttp==null)
{
alert ("Este browser não suporta HTTP Request")
return
}var url=url;
url=url+"?id="+id;url=url+"?"+txt; // nesse txt que fica o nome e não o value do selec, era para ser...// ele funciona normal no split... a coisa é colocar o valor do nome aí e não outro value igual...
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById(container).innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}function GetXmlHttpObject()
{
var objXMLHttp=nullif (window.XMLHttpRequest)
objXMLHttp=new XMLHttpRequest()
else if (window.ActiveXObject)
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")return objXMLHttp
}****************************************************************************************************************************
que chama (pela função acima) a página estado.asp. Isso depois que solecionou o combo país:
estado.asp:
****************************************************************************************************************************
id = split(Request.QueryString("id"),"?")
info = id(0)
info1 = id(1)
sql = "select * from estados where id_pais ="& info &" order by estado desc"
set tab = conexao.execute(sql)
%>
<select name="estados" id="estados" onchange="RetornoAjax(this.value, 'cidades.asp', 'cidades')" style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080">
<option value="">-Selecione-</option>
<% while not tab.eof %>
<option value="<%=tab("id_estado")%>"><%=tab("estado")%></option>
<% tab.movenext
wend
conexao.close
set tab = nothing
%>
</select>****************************************************************************************************************************
que por sua vez chama o combo cidade (onde coloquei a sua função):
****************************************************************************************************************************
id = split(Request.QueryString("id"),"?")
info = id(0)
'info1 = id(1)sql = "select * from cidades where id_estado ="& info &" order by cidade desc"
set tab = conexao.execute(sql)%>
<select name="cidades" id="cidades" onchange="verificaEstado(this);" style="font-family: Verdana; font-size: 10 px; color: #808080; border: 1px solid #808080">
<option value="">-Selecione-</option>
<% while not tab.eof %>
<option value="<%= tab("id_cidade")%>"><%= tab("cidade")%></option>
<% tab.movenext
wend
conexao.close
set tab = nothing
%>
</select>****************************************************************************************************************************
E aqui está a sua função:
funcao1.js
function verificaEstado(objEstado)
{
if (objEstado.options[objEstado.selectedIndex].text == "SAO PAULO")
{
// Aqui voce chama a funçao para zonas se o estado for Sao Paulo
RetornoAjax(objEstado.value, 'zonas.asp', 'zona');
}
else
{
// Aqui para outros estados
RetornoAjax(objEstado.value,'profissionais.asp','cidadesoutrosestados');
}
}
Entendeu?
Obrigado pela atenção.
-
Marcelo, esse erro deve ter ocorrido por que o id foi em branco de um alert neste id dentro da funcao.js para ver se esta recebendo valor.
Exemplo:
função.js:
****************************************************************************************************************************
function RetornoAjax(id, url, container)
{alert(id);
if (id == "")
{
var txt = "1"
document.getElementById("estados").innerHTML = "<select></select>";
document.getElementById("cidades").innerHTML = "<select></select>";
document.getElementById("zona").innerHTML = "<select></select>";
document.getElementById("profs").innerHTML = "<select></select>";return
}
var xmlHttp=GetXmlHttpObject()if (xmlHttp==null)
{
alert ("Este browser não suporta HTTP Request")
return
}var url=url;
url=url+"?id="+id;url=url+"?"+txt; // nesse txt que fica o nome e não o value do selec, era para ser...// ele funciona normal no split... a coisa é colocar o valor do nome aí e não outro value igual...
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById(container).innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}function GetXmlHttpObject()
{
var objXMLHttp=nullif (window.XMLHttpRequest)
objXMLHttp=new XMLHttpRequest()
else if (window.ActiveXObject)
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")return objXMLHttp
}Abraços
Estevam