Ir para conteúdo
Fórum Script Brasil
  • 0

Select / combo não seleciona


marvi

Pergunta

Pessoal, preciso de ajuda que não estou conseguindo resolver!

Tenho um combo, caixa suspensa, que seleciona o país e assim exibi no select / combo o estado referente a esse páis. Tipo: Brasil exbide São Paulo, França exibe exterior, por exemplo. Mas quando faço Brasil ele exibe São Paulo e quando resolvo exibi França ele mostra no outro combo exterior e são paulo, em vez só de exterior, como resolver?

Combo:

<select name="txt_categoria" class="cboStyle" onChange="BuscaProdutos()" style="color: #575757; border: 1px solid #C0C0C0; background-color: #FFFFFF">
<option value="Selecione o Estado">Selecione o País</option>
<% 'aqui setamos na propriedade onChange, a função BuscaProdutos(). A cada mudança, a função é executada.%><%
'Fazemos a busca de todas as categorias para preencher o primeiro combo.
SQL_Cat = "select * from paises order by categoria"
Set RS_Cat = objConn.Execute(SQL_Cat)

Do Until RS_Cat.EOF
  Response.Write "<option value="&RS_Cat("id")&">"&RS_Cat("categoria")&"</option>"
  RS_Cat.MoveNext
Loop
%>
</select>
Script que o combo chama:
<script>
function BuscaProdutos()
{
//a variável categoria vai receber o valor selecionado na primeira combo (txt_categoria) 
var categoria = document.form1.txt_categoria.options[document.form1.txt_categoria.selectedIndex].value;

//setamos duas variáveis auxiliares que irão ser utilizadas para controles
var controle = 0
var contador = 0

<%
'Listamos as categorias
SQL_Cat2 = "select * from paises order by categoria"
Set RS_Cat2 = objConn.Execute(SQL_Cat2)

'Enquanto não for final de arquivo, listamos os cidades da estado atual (que está no loop)
Do Until RS_Cat2.EOF
  SQL_Prod = "select * from estados where id_categoria = "&RS_Cat2("id") 
  Set RS_Prod = objConn.Execute(SQL_Prod)

  'Vamos verificar a quantidade de registros encontrados. Serve também como um controle.
  SQL_Count = "select count(*) as maximo from estados where id_categoria = "&RS_Cat2("id")
  Set RS_Count = objConn.Execute(SQL_Count)

  Do Until RS_Prod.EOF
  %>
   //Enquanto não for fim de arquivo, verificamos se o produto retornado pertence à categoria guardada na
   //variável categoria (Java Script) e se nosso "controle" é menor que o máximo de registros.
   //Se tudo estiver OK, incrementamos "controle" e "contador" e escrevemos a nova opção em txt_produto.
   //Reparem que "contador" atua como a posição que o registro ocupará no combo.
    if(<%=RS_Prod("id_categoria")%> == categoria && controle < <%=RS_Count("maximo")%>)
    {
       controle++
       document.form1.txt_produto.options[contador]=new Option('<%=RS_Prod("produto")%>','<%=RS_Prod("cidade_id")%>');
     
       contador++
    }  
<%

    RS_Prod.MoveNext
  Loop
  RS_Cat2.MoveNext
Loop

%>
}
</script>
E combo que exibi os estados do país escolhido:
<select name="txt_produto" class="cboStyle" style="color: #575757; border: 1px solid #C0C0C0; background-color: #FFFFFF">
<option value="Selecione a Cidade">Selecione o Estado</option>
</select>

Alguém sabe como resolver ou tem um exemplo melhor?

Obrigado!

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Olá Kuroi, funcionou! Obrigado mesmo!

Mas a questão é que esse meu combo(1) preenche o outro combo(2) só que esse não preenche o combo(3)... Saiba o que ocorre no script que não preenche?

Coloquei um onChange no select também e modifiquei a minha função, criei até outra separada, mas nada, fica morto...

Tem alguma dica na sequência do script?

Obrigado!

Marcelo

Link para o comentário
Compartilhar em outros sites

  • 0

esse segundo combo tem q preenchar o terceiro com uma funcao do mesmo jeito q essa??

se for e a segunda funcao esta dando errado, apague-a e comece de novo, é só copiar da outra e mudar os nomes dos campos, não é?? então talvez seja mais facil fazer isso do q encontrar o erro.

mas se não conseguir, então poste o codigo da segunda funcao e tb o codigo html do segundo combo.

alias, se a pagina estiver hospedada, passa o link q fica mais facil.

Link para o comentário
Compartilhar em outros sites

  • 0

então, olhei o seu codigo javascript da funcao buscacidades e eles esta assim:

<script>
function BuscaCidades()
{
//a variável categoria vai receber o valor selecionado na primeira combo (txt_categoria)
var cidadesscript = document.form1.txt_produto.options[document.form1.txt_produto.selectedIndex].value;
for (i = 1; i < document.form1.txt_cidade.length; i++)
{
    document.form1.txt_cidade.options[i] = null;
}
//setamos duas variáveis auxiliares que irão ser utilizadas para controles
var controle = 0
var contador = 0


}
</script>[/code]

ou seja, ele não esta preenchendo. o erro então esta no asp, provavelmente tem alguma coisa q você não esta lembrando de alterar, porque ele não deve estar encontrando as cidades. veja se consegue descobrir, senao poste ai o codigo asp.

outra coisa, veja na primeira linha da funcao acima, q você iguala o cidadesscript ao document.form1.txt_produto. não deveria ser o document.form1.txt_cidade??

Link para o comentário
Compartilhar em outros sites

  • 0

Sobre o cidadesscript ao document.form1.txt_produto está certo sim, pois ele vai pegar as informações do combo estado que tem esse nome txt_produto e passar para essa variavel... Como foi o do Pais que passou para o estado...

Rapaz não achei ainda como resolver isso e fazer ele ter a mesma função do combo país para estado... Vou ver no banco as minhas relações só pode... Mas eu acho que fiz igual do combo páis para estado, o do estado para cidade...

Esse funciona, que é do combo páis para estado:

<script>
function BuscaProdutos()
{
//a variável categoria vai receber o valor selecionado na primeira combo (txt_categoria) 
var categoria = document.form1.txt_categoria.options[document.form1.txt_categoria.selectedIndex].value;
 for (i = 1; i < document.form1.txt_produto.length; i++)
{
    document.form1.txt_produto.options[i] = null;
}
//setamos duas variáveis auxiliares que irão ser utilizadas para controles
var controle = 0
var contador = 0

<%
'Listamos as categorias
SQL_Cat2 = "select * from paises order by categoria"
Set RS_Cat2 = objConn.Execute(SQL_Cat2)



'Enquanto não for final de arquivo, listamos os cidades da estado atual (que está no loop)
Do Until RS_Cat2.EOF
  SQL_Prod = "select * from estados where id_categoria = "&RS_Cat2("id")
  Set RS_Prod = objConn.Execute(SQL_Prod)

  'Vamos verificar a quantidade de registros encontrados. Serve também como um controle.
  SQL_Count = "select count(*) as maximo from estados where id_categoria = "&RS_Cat2("id")
  Set RS_Count = objConn.Execute(SQL_Count)

  Do Until RS_Prod.EOF
  %>
   //Enquanto não for fim de arquivo, verificamos se o produto retornado pertence à categoria guardada na
   //variável categoria (Java Script) e se nosso "controle" é menor que o máximo de registros.
   //Se tudo estiver OK, incrementamos "controle" e "contador" e escrevemos a nova opção em txt_produto.
   //Reparem que "contador" atua como a posição que o registro ocupará no combo.
    if(<%=RS_Prod("id_categoria")%> == categoria && controle < <%=RS_Count("maximo")%>)
    {
       controle++
       document.form1.txt_produto.options[contador]=new Option('<%=RS_Prod("produto")%>','<%=RS_Prod("cidade_id")%>');
     
       contador++
    }  
  
   
<%

    RS_Prod.MoveNext
  Loop
  RS_Cat2.MoveNext
Loop


%>
}
</script>
Esse a função que tenho para cidades agora e que não roda (tentei simular o de cima):
<script>
function BuscaCidades()
{
//a variável categoria vai receber o valor selecionado na primeira combo (txt_categoria) 
var cidadesscript = document.form1.txt_produto.options[document.form1.txt_produto.selectedIndex].value;
 for (i = 1; i < document.form1.txt_cidade.length; i++)
{
    document.form1.txt_cidade.options[i] = null;
}
//setamos duas variáveis auxiliares que irão ser utilizadas para controles
var controle = 0
var contador = 0

<%
'Listamos as categorias
SQL_Cat3 = "select * from estados order by id_categoria"
Set RS_Cat3 = objConn.Execute(SQL_Cat3)



'Enquanto não for final de arquivo, listamos os cidades da estado atual (que está no loop)
Do Until RS_Cat3.EOF
  SQL_Prod1 = "select * from cidades where id = "&RS_Cat3("id")
  Set RS_Prod1 = objConn.Execute(SQL_Prod1)

  'Vamos verificar a quantidade de registros encontrados. Serve também como um controle.
  SQL_Count1 = "select count(*) as maximo from cidades where id = "&RS_Cat3("id")
  Set RS_Count1 = objConn.Execute(SQL_Count1)

  Do Until RS_Prod1.EOF
  %>
   //Enquanto não for fim de arquivo, verificamos se o produto retornado pertence à categoria guardada na
   //variável categoria (Java Script) e se nosso "controle" é menor que o máximo de registros.
   //Se tudo estiver OK, incrementamos "controle" e "contador" e escrevemos a nova opção em txt_produto.
   //Reparem que "contador" atua como a posição que o registro ocupará no combo.
    if(<%=RS_Prod1("id")%> == categoria && controle < <%=RS_Count1("maximo")%>)
    {
       controle++
       document.form1.txt_cidade.options[contador]=new Option('<%=RS_Prod1("cidades")%>','<%=RS_Prod1("id")%>');
     
       contador++
    }  
  
   
<%

    RS_Prod1.MoveNext
  Loop
  RS_Cat3.MoveNext
Loop


%>
}
</script>

Obrigado!

Marcelo

Eu acho que a função de baixo não está sendo chamada será? Acho que deveria colocar tudo na mesma função, estou tentando aqui mas nada ainda...

Link para o comentário
Compartilhar em outros sites

  • 0

você desistiu de fazer do outro jeito?? vai fazer em ajax mesmo??

se ainda tiver tentando do outro metodo, veja essa parte do seu codigo:

SQL_Count1 = "select count(*) as maximo from cidades where id = "&RS_Cat3("id")
ai você tem q selecionar todas as cidades de cada estado. ai você esta pegando pelo campo id no where. mas esse id se refere a cidade ou ao estado?? não teria q ser o id do estado?? otra coisa:
if(<%=RS_Prod1("id")%> == categoria && controle < <%=RS_Count1("maximo")%>)

veja q ai você usa a variavel categoria. mas la em cima você declarou como cidadesscript

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...