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

Ajuda com combobox


Evandro Domingues

Pergunta

Olá amigos...

tenho o código conforme abaixo, e não consigo entender o que acontece com ele, que as reações são completamente diferentes no IE e no FF, e o pior é que não são como eu espero. :blink:

Me ajudem por favor. :huh:

Conto com os meus companheiros "feras" desse fórum.

Já tentei várias soluções pesquisadas e nada funciona, não entendo o que acontece e não sei o que fazer. :blush:

index.asp

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
&lt;script type="text/javascript">
  function filtragenero(filtro) {
    if (window.XMLHttpRequest) {
      xmlhttp=new XMLHttpRequest();
    } else {
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("tudo").innerHTML=xmlhttp.responseText;
      }
    }
    if (filtro == "") {
      xmlhttp.open("GET","index.asp",true);
      xmlhttp.send();
    } else {
      xmlhttp.open("GET","index.asp?f="+filtro,true);
      xmlhttp.send();
    }
  }
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
&lt;script language="javascript" src="js/ajax.js"></script>
</head>
<body>
    <form action="index.asp" method="get" name="frm_edicao" target="_self" id="frm_edicao">
            <label>
              <select name="slt_filtragem" id="slt_filtragem">
                <option value="0">Todos</option>
                <option value="1">Não Classificados</option>
              </select>
            </label>
    </form>
</body>
</html>
Reações Utilizando o onchange da tag select:
<form action="index.asp" method="get" name="frm_filtro" target="_self" id="frm_filtro">
<label>
<select name="slt_filtragem" id="slt_filtragem" onchange="filtragenero(this.value)">
:( No IE inicia na opção “Todos”, e quando seleciono a outra opção ele filtra corretamente, mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada. Simplesmente não funciona. No FF inicia na opção “Todos”, e quando seleciono a outra opção ele filtra corretamente, mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada. Simplesmente não funciona. Utilizando o onblur da tag select:
<form action="index.asp" method="get" name="frm_filtro" target="_self" id="frm_filtro">
<label>
<select name="slt_filtragem" id="slt_filtragem" onblur="filtragenero(this.value)">
:( No IE inicia na opção “Todos”, e funciona corretamente para todas as opções, inclusive a "Todos" (para desfazer o filtro), porém tenho que clicar na página, fora do combo, para funcionar. No FF inicia na opção “Todos”, e funciona corretamente para todas as opções, inclusive a "Todos" (para desfazer o filtro), porém tenho que clicar na página, fora do combo, para funcionar. Utilizando o onchange da tag option do select:
<form action="index.asp" method="get" name="frm_filtro" target="_self" id="frm_filtro">
<label>
<select name="slt_filtragem" id="slt_filtragem">
<option value="0" onchange="filtragenero(this.value)">Todos</option>
<option value="1" onchange="filtragenero(this.value)">Não Classificados</option>
:o Este é o pior!!! No IE inicia na opção “Todos”, não faz nada em nenhuma das opções. No FF inicia na opção “Todos”, não faz nada em nenhuma das opções. Utilizando o onclick da tag option do select:
<form action="index.asp" method="get" name="frm_filtro" target="_self" id="frm_filtro">
<label>
<select name="slt_filtragem" id="slt_filtragem">
<option value="0" onclick="filtragenero(this.value)">Todos</option>
<option value="1" onclick="filtragenero(this.value)">Não Classificados</option>

:( No IE inicia na opção “Todos”, não faz nada em nenhuma das opções.

:P No FF inicia na opção “Todos”, funciona corretamente para todas as opções, inclusive a "Todos" (para desfazer o filtro), não tenho que clicar em mais nada... apenas na opção do combo, como é desejado.

:angry: Porém só funciona no FF.

Espero mesmo uma ajuda de vocês.

Valeu pessoal.

Olá amigos...

tenho o código conforme abaixo, e não consigo entender o que acontece com ele, que as reações são completamente diferentes no IE e no FF, e o pior é que não são como eu espero. :blink:

Não pensei que fosse assim tão complicado !!!

Tem um monte de visualização e nem uma sugestão sequer !!!

Preciso de ajuda companheiros...

Agradeço mesmo... Valeu.

Esta dúvida está relacionada ao tópico abaixo:

http://scriptbrasil.com.br/forum/index.php?showtopic=162271

Tenho uma página (index.asp) que tem um formulário. Neste formulário, quando seleciono uma opção em combobox, o mesmo executa novamente a página index, apenas criteriando o select conforme opção.

No entanto, quando a página é reaberta, os componentes combobox's voltam setados no valor inicial.

Tem como quando a página voltar, ela já trazer setado o valor anterior, e não o atual ? Como faço isto.

Preciso de ajuda.

Grato.

Editado por Evandro Domingues
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

mas ainda não deu pra entender o q você quer....

mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada.

o q seria "reabrir" a pagina?? você quer q quando a pagina for carregada, ele já faca o filtro?? se for isso, chame a funcao filtragenero() uma vez quando a pagina carregar, q deve funcionar.

Tem como quando a página voltar, ela já trazer setado o valor anterior, e não o atual ? Como faço isto.

se você quer q toda a vez q ele abrir a pagina, a ultima opcao q ele clicou esteja selecionada, vai ter q usar a linguagem server-side e guardar em algum lugar a ultima opcao q ele clicou. grave na session, cookie, banco de dados, como achar melhor.

Link para o comentário
Compartilhar em outros sites

  • 0
mas ainda não deu pra entender o q você quer....

mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada.

o q seria "reabrir" a pagina?? você quer q quando a pagina for carregada, ele já faca o filtro?? se for isso, chame a funcao filtragenero() uma vez quando a pagina carregar, q deve funcionar.

Tem como quando a página voltar, ela já trazer setado o valor anterior, e não o atual ? Como faço isto.

se você quer q toda a vez q ele abrir a pagina, a ultima opcao q ele clicou esteja selecionada, vai ter q usar a linguagem server-side e guardar em algum lugar a ultima opcao q ele clicou. grave na session, cookie, banco de dados, como achar melhor.

Ok... quanto à manter o valor da última opção selecionada no combo, vou utilizar session.

Mas o problema é o seguinte, conforme o código que passei, se seleciono a opção "não classificados" no combo, tem várias condições e reações conforme escrito.

Eu acredito que foi tudo muito bem explicado.

Se eu utilizo o onchange na tag select, ou o onclick tem algumas reações diferentes e que não são as desejadas... tanto no ie quanto no ff.

É só ler o post. foi bem explicado e documentado... tanto o código e a utilização, quanto as reações encontradas.

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0
No IE inicia na opção “Todos”, e quando seleciono a outra opção ele filtra corretamente, mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada. Simplesmente não funciona.

No FF inicia na opção “Todos”, e quando seleciono a outra opção ele filtra corretamente, mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada. Simplesmente não funciona.

mas não entendi isso aqui... o q é "reabrir" a pagina?? se você abre uma vez, se você abrir de novo, tem q acontecer a mesma coisa ue.

você ta querendo dizer, tipo quando você clicar em voltar no navegador ou coisa assim??

Link para o comentário
Compartilhar em outros sites

  • 0
No IE inicia na opção “Todos”, e quando seleciono a outra opção ele filtra corretamente, mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada. Simplesmente não funciona.

No FF inicia na opção “Todos”, e quando seleciono a outra opção ele filtra corretamente, mas quando reabre a página vem com a todos e se clico nela (Todos) para desfazer o filtro, não faz nada. Simplesmente não funciona.

mas não entendi isso aqui... o q é "reabrir" a pagina?? se você abre uma vez, se você abrir de novo, tem q acontecer a mesma coisa ue.

você ta querendo dizer, tipo quando você clicar em voltar no navegador ou coisa assim??

Certo, então vamos lá.

Quando eu digo "reabrir" a página, na verdade é a execução da index.asp já aberta no navegador.

Isto é executado pela função filtragenero.

if (filtro == "") {
      xmlhttp.open("GET","index.asp",true);
      xmlhttp.send();
    } else {
      xmlhttp.open("GET","index.asp?f="+filtro,true);
      xmlhttp.send();
    }
onde o xmlhttp.open efetua a reabertura e regarrega a página com as condições de filtragem para o select... sendo 1 não classificados, ou 0 todos... neste caso, o select é geral sem nenhuma condição de filtragem (where). o problema acontece é com o click ou change na tag... no ie fica de uma forma no ff de outra. A forma que quero seria mais ou menos esta: Utilizando o onclick da tag option do select:
<form action="index.asp" method="get" name="frm_filtro" target="_self" id="frm_filtro">
<label>
<select name="slt_filtragem" id="slt_filtragem">
<option value="0" onclick="filtragenero(this.value)">Todos</option>
<option value="1" onclick="filtragenero(this.value)">Não Classificados</option>

No IE inicia na opção “Todos”, não faz nada em nenhuma das opções.

No FF inicia na opção “Todos”, funciona corretamente para todas as opções, inclusive a "Todos" (para desfazer o filtro), não tenho que clicar em mais nada... apenas na opção do combo, como é desejado.

Porém só funciona no FF.

O código que passei está funcional e é mais fácil avaliar o que estou falando, se executar e testar ele.

Vlw pela atenção.

Link para o comentário
Compartilhar em outros sites

  • 0
hum... tente assim:

<select name="slt_filtragem" id="slt_filtragem" onchange="filtragenero(this.options[this.selectedIndex].value);">
Grande kuroi... funcionou. O problema, ainda é o seguinte. A página vem setada no combo com a opção "Todos" - value 0. Então quando chamo a função filtragenero, executo o seguinte:
if (filtro == "") {
      xmlhttp.open("GET","index.asp",true);
      xmlhttp.send();
      window.location.reload();
    } else {
      xmlhttp.open("GET","index.asp?f="+filtro,true);
      xmlhttp.send();
    }

assim, a página é carregada novamente com as condições de filtragem do combo. Só que a página inicia com a opção "Todos", mesmo quando filtradas... "Não Classificados." por exemplo.

Quando eu clico em "Todos" no combo, seria para passar filtro = "" e apresentar todos os dados. Isto não acontece.

Aparentemente, a condição do combo, que já vem apresentada é desconsiderada, pois já vem como selecionada, no clique.

Ou seja... agora está funcionando. Ao clique, a filtragem é efetuada, em qualquer navegador, porém a opção "Todos" não está executando o select sem a condição de filtragem.

Vlw pela ajuda... já tá caminhando. Pode até encerrar, mas se tiver uma sugestão nesse problema, é de grande ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0

quando ele selecionar todos (value = 0), era pra passar filtro == ""??

se for isso, não ficaria mais facil mudar na funcao, pra considerar 0??

if (filtro == "0") {
      xmlhttp.open("GET","index.asp",true);
      xmlhttp.send();
      window.location.reload();
    } else {
      xmlhttp.open("GET","index.asp?f="+filtro,true);
      xmlhttp.send();
    }[/code]

seria isso??

Link para o comentário
Compartilhar em outros sites

  • 0
quando ele selecionar todos (value = 0), era pra passar filtro == ""??

se for isso, não ficaria mais facil mudar na funcao, pra considerar 0??

if (filtro == "0") {
      xmlhttp.open("GET","index.asp",true);
      xmlhttp.send();
      window.location.reload();
    } else {
      xmlhttp.open("GET","index.asp?f="+filtro,true);
      xmlhttp.send();
    }
seria isso??
Olha só... é isso mesmo. Só que é o seguinte. Eu é que errei ao postar o código. Estava fazendo alguns testes quando enviei. O código original mesmo é esse:
function filtragenero(filtro) {
  if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();
  } else {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("tudo").innerHTML=xmlhttp.responseText;
    }
  }
  if (filtro == "0") {
    xmlhttp.open("GET","index.asp",true);
    xmlhttp.send();
  } else {
    xmlhttp.open("GET","index.asp?f="+filtro,true);
    xmlhttp.send();
  }
}

Eu considero o valor de filtro = "0", e não tenho a linha que dá reload na página (window.location.reload())

Aí o que acontece, quando chamo a página pela primeira vez, ou não, sem utilizar a filtragem, retorna o rs completo sem cláusula "where" para filtragem.

Quando utilizo a filtragem. A função passa a querystring de f e retorna o rs filtrado, sendo a condição = valor do combo.

Depois de utilizada a filtragem 1 vez, então a página é reapresentada pela função na linha (xmlhttp.open("GET","index.asp?f="+filtro,true)). Depois disso, a página é carrega com o combo setado em "Tudo" ou seja valor "0" para filtro. E se clico no combo exatamente na opção "Tudo", para mostrar tudo, ou seja retornar a rs sem filtragem, não faz nada, mesmo com a querystring sendo 0... ou seja filtro=="0". É como se a página considerasse a opção já posicionada e ignorasse ela, não repassando o onchange.

Então preciso atualizar a página, ou abri-la novamente para carregar o rs (geral) sem filtragem.

Acho que fui claro... não sei.

você entendeu ?

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