Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NaDa

Dropdown dinamica

Recommended Posts

NaDa

Boas,

Queria uma ajudinha aqui na optimização de um script, se alguém puder dar uma mãozinha ;)

Queria umas dropdowns dinamicas, pesquisei um script fácil visto que javascript ainda estou bem leste.. Encontrei um que faz o que quero, mas tem um senão..

	<script type="text/javascript">
	function verDinamico(opcao, nome){
		var xmlhttp;
		if (opcao==""){
		  document.getElementById("txtHint").innerHTML="";
		  return;
		}
		if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
		  xmlhttp=new XMLHttpRequest();
		}
		else{// code for IE6, IE5
		  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		xmlhttp.onreadystatechange=function(){
			if (xmlhttp.readyState==4 && xmlhttp.status==200){
				document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
			}
		}
		xmlhttp.open("GET","index.php?pag=actions&action=ajax_dropdown&opcao="+opcao+"&nome="+nome,true);
		xmlhttp.send();
	}
	</script>

Na segunda vez(segunda div) ela simplesmente desaparece para aparecer a nova..

Entao alterei para criar uma div e nao escrever por cima..

                var newdiv = document.createElement('div');
			 newdiv.innerHTML=xmlhttp.responseText;
			 document.getElementById(nomeDoDiv).appendChild(newdiv);

Mas caso eu numa dropdown escolha uma opção e depois vá la e escolha outra, todas as dropdowns desaparecem e tem de começar da primeira dowpdown..

Há uma maneira fácil de resolver isto? :S

Desde já obrigado e bom sábado ;)

Edited by NaDa

Share this post


Link to post
Share on other sites
brunoais

Se queres otimizar, tens muito ainda para fazer.

1º Assume que o IE6 e IE5 não existem, por isso, apaga aquele if que veirfica isso e usa só o XMLHttpRequest().

2º Não executes código desnecessariamente. Usa o evento load (atributo onload, só para n haver chatices com o IE7 e IE8, senão seria o addEventListener())

Por exemplo:

xmlhttp.onload = function (){
   // faz aqui o que tens a fazer. 
}

Usando o código que tens aí só para identificares melhor o tipo de coisa para meteres ali:

xmlhttp.onload = function (){
   document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}

Nota que isto está muito errado se queres otimização.

O melhor que podes fazer é só enviar pela rede a informação mínima e necessária para apresentar o que queres apresentar. E não andar a procurar por um elemento no DOM sempre que se quer fazer algo a ele.

Neste caso, o melhor que podes fazer é enviar pares chave-valor para identificares a que dados é que se refere.

Para tornar o processo mais fácil (e mais cross browser), podes bem usar um documento XML de que podes fazer parse (basta usares o valor xmlhttp.responseXML) no js. Depois é só percorreres o XML e obteres os dados que queres.

Esta parte já tem muito tempo e acho que, excecionalmente, o w3s pode ajudar. Vê aqui:

http://www.w3schools.com/dom/dom_nodes_navigate.asp

Se quiseres mais ajuda, eu posso ajudar, mas acho que já tens bastante por onde começar.

Edited by brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.