[RESOLVIDO] Problema! Estrutura de repetição dentro de outra - JAVASCRIPT

3 respostas
R

galera sou novo no fórum, procurei na internet, mas nada encontrei a respeito!
estou com um problema no meu script, vou explicar o que acontece:

Preciso colocar uma estrutura de repetiçao do tipo “for” dentro de outra. Mas infelizmente, o loop da minha primeira estrutura de repetição não se completa, ou seja, ele entra dentro da minha primeira estrutura de repetição, em seguida na segunda e quando o laço da minha segunda estrutura se completa ele finaliza o laço da primeira sem se completar…

aqui está o script:

var xmldoc = ajax.responseXML;
		
		var process = xmldoc.getElementsByTagName('rua');
		
		for (i=0;i<process.length;i++)
		{
			var no = process[i];
			
			var codigo = no.childNodes[0].firstChild.nodeValue;
			
			var nome = no.childNodes[1].firstChild.nodeValue;
			
			var comboRua = document.frm_localizacao.combo_rua.options.length;
			
				
			for (y=0;y<=comboRua;y++)
			{
				var comboValor = document.frm_localizacao.combo_rua.options[y].text;	
				
				alert(y);
				
				if (nome == comboValor)
				{
					rmCombo = document.frm_localizacao.combo_rua;
					rmCombo.options[y] = null;
					alert('foi');
				}					
			}
			alert('deu certo');
			document.frm_localizacao.combo_rua.options[i+1] = new Option(nome,codigo);
		}

Por favor, me ajudem!

3 Respostas

L

Olá rafa_phodera,

A lógica da dinâmica de um for é igual as outras linguagens como Java ou C#. O escopo de um loop só acaba quando o mesmo é finalizado.

Exemplo:

var body = document.getElementsByTagName('body')[0];
	var arrayA = [ 1, 2, 3 ];
	var arrayB = [ 'A', 'B', 'C' ];

	// loop primeiro nivel
	for ( var i = 0; i < arrayA.length; i++) {
		// loop segundo nivel
		for ( var n = 0; n < arrayB.length; n++) {
			body.innerHTML = body.innerHTML + '-' + arrayA[i] + arrayB[n];
		}
	}

Resultado:

-1A-1B-1C-2A-2B-2C-3A-3B-3C

No seu código é difícil dizer a solução sem ter os valores das variáveis. Talvez no tamanho da variável “comboRua” que está o problema.

A dica que eu dou é a seguinte: não use “alerts” para conhecer os valores das variáveis em tempo de execução e sim use uma ferramenta apropriada para esta necessidade. Instale o navegador Firefox com o complemento Firebug e inspecione o código por ele - tutorial sobre como “debugar” o javascript: http://www.devmedia.com.br/articles/viewcomp.asp?comp=7143. Isso vai lhe ajudar a encontrar a solução sozinho e muito rápido.

Recomendo também a leitura deste livro: http://www.submarino.com.br/produto/1/21471189/melhor+do+javascript,+o?franq=273452.

Espero ter ajudado!
Abraço.

R

leandroadacosta

muito obrigado caraaa pela sua ajuda!
instalei o firebug que resolveu os meus problemas e apontou uma falha na linha onde é feito o segundo teste lógico com o for do segundo nível!

meu combo no estado inicial possui apenas um option com o índice igual a 0 : “selecione uma rua”. A variável comboRua informa que o tamanho do combo é 1 e no momento que y fica igual a 1 no na minha segunda estrutura for a variável comboValor perde a sua referência, pois ainda não existe no combo o indice 1.

foi feita apenas uma única e simples alteração:

antes:

for (y=0;y<=comboRua;y++)

depois:

for (y=0;y<comboRua;y++)

deixo a seguir o post do script com a solução definitiva:

var xmldoc = ajax.responseXML;

var process = xmldoc.getElementsByTagName('rua');
						
		for (i=0;i<process.length;i++)
		{
			var no = process[i];
			
			var comboRua = document.frm_localizacao.combo_rua.options.length;
			
			var codigo = no.childNodes[0].firstChild.nodeValue;
			
			var nome = no.childNodes[1].firstChild.nodeValue;
			
			
			for (y=0;y<comboRua;y++)
			{
				var comboValor = document.frm_localizacao.combo_rua.options[y].text;	
				
				if (nome == comboValor)
				{
					rmCombo = document.frm_localizacao.combo_rua;
					rmCombo.options[y].remove();
											
				}

			}
			document.frm_localizacao.combo_rua.options[i+1] = new Option(nome,codigo);
		}

OBS: USEM O FIREBUG, FERRAMENTA MUITO BOA PARA DEPURAR UM SCRIPT E ENCONTRAR ERROS!

muito Obrigado!

M

rafa_phodera que bom que resolveu seu problema, mas dando uma dica: quando for postar código coloque entre as tags code para ficar mais legível.

Criado 27 de dezembro de 2010
Ultima resposta 28 de dez. de 2010
Respostas 3
Participantes 3