none
Pegar valor do select RRS feed

  • Pergunta

  • Pessoal estou usando a seguinte função

    onchange="RetornoAjax(this.value, 'estados.asp', 'estados')"

     

    Função:

     

    Code Snippet
    function 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 Snippet

    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>

     

     

    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

    terça-feira, 22 de julho de 2008 18:43

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

    terça-feira, 22 de julho de 2008 19:03

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

    terça-feira, 22 de julho de 2008 19:03
  • 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 Snippet

    id = split(Request.QueryString("id"),"?")
    info = id(0)
    info1 = id(1)
    response.write(info1)
    response.end

    sql = "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?

    terça-feira, 22 de julho de 2008 19:12
  • 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

    terça-feira, 22 de julho de 2008 19:34
  • 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...

    terça-feira, 22 de julho de 2008 19:40
  • Luiz...

     

    Você quer que na opção do país para estado rode essa função e nos outros combos rode a função original? Isso?

    terça-feira, 22 de julho de 2008 20:02
  • 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

     

     

     

     

     

    terça-feira, 22 de julho de 2008 20:11
  • 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=null

         if (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.

    terça-feira, 22 de julho de 2008 20:29
  • 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=null

         if (window.XMLHttpRequest)
             objXMLHttp=new XMLHttpRequest()
         else if (window.ActiveXObject)
             objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")

    return objXMLHttp
    }

     

    Abraços

     

    Estevam

    quarta-feira, 23 de julho de 2008 16:30