Jump to content
Fórum Script Brasil
  • 0

Ajuda com combobox


Evandro Domingues

Question

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.

Edited by Evandro Domingues
Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...