Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vallades

Erro: Uncaught TypeError: Cannot read property '0' of undefine

Recommended Posts

Olá pessoal,

 

estou fazendo algumas alterações em um sistema legado aqui da empresa e estou me deparando com o seguinte erro somente no Chrome e no Firefox:

 

Cannot read property 'length' of null

 

esse é o código:

 

function VerificaChecks(checkBoxTodos, checkboxes, formulario, Botao){
    var form = document.getElementById(formulario).InnerHtml;
    Qtd = 0;
    
    for (x = 0; x < form.length; x++){
        if (form.elements[x].name.substr(0, checkboxes.length) == checkboxes){            
            if(form.elements[x].checked)
                Qtd++;
        }
    }
    if(Qtd == 0){
        document.getElementById(Botao).disabled = true;
        document.getElementById(checkBoxTodos).checked = false;
    }
    else    
        document.getElementById(Botao).disabled = false;
}

Após dar uma debugada no firebug pude perceber que a minha variável form sempre esta vindo como null, fazendo com que quando eu faça a contagem no meu form ele nunca tenha nada para contar.

 

Assim sendo eu fiz algumas modificações no código e no lugar de eu utilizar a variável form eu estou utilizando o paramentro formulario que eu estou passando.

 

Até ai beleza, pois consegui resolver um dos problemas, porém com a solução deste me ocasionou outro erro que não estou conseguindo identificar o que pode ser, e queria uma ajuda de vocês, abaixo segue o meu código com as alterações que eu fiz e o erro que está dando agora em todos os navegadores.

 

function VerificaChecks(checkBoxTodos, checkboxes, formulario, Botao){
    //var form = document.getElementById(formulario).InnerHtml;
    Qtd = 0;
    
    for (x = 0; x < formulario.length; x++){
        if (formulario.elements[x].name.substr(0, checkboxes.length) == checkboxes){            
            if(formulario.elements[x].checked)
                Qtd++;
        }
    }
    if(Qtd == 0){
        document.getElementById(Botao).disabled = true;
        document.getElementById(checkBoxTodos).checked = false;
    }
    else    
        document.getElementById(Botao).disabled = false;
}

function ShowHideTable(name){
    if(document.getElementById('Pesquisa'+name).style.display == 'block'){
        document.getElementById('Pesquisa'+name).style.display = 'none';
    }
    else{
        document.getElementById('Pesquisa'+name).style.display = 'block';
    }
}

O erro que está falando é o seguinte: Uncaught TypeError: Cannot read property '0' of undefined

 

Desde já obrigado ;-)

Compartilhar este post


Link para o post
Compartilhar em outros sites
function VerificaChecks(checkBoxTodos, checkboxes, formulario, botao){
	var form = document.getElementById(formulario).innerHtml;
	var qtd = 0;

	for (x = 0; x < form.length; x++) {
		if (form.elements[x].name.substr(0, checkboxes.length) == checkboxes) {			
			if (form.elements[x].checked) {
				qtd++;
			}
		}
	}

	if (qtd == 0) {
		document.getElementById(botao).disabled = true;
		document.getElementById(checkBoxTodos).checked = false;
	} else {
		document.getElementById(botao).disabled = false;
	}
}

JavaScript é case-sensitive e tome cuidado com declaração de variável sem var (global), logo logo isso vira um terror para debug e manutenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enrico primeiramente obrigado pela resposta e pelas dicas, vou atentar a estes detalhes nos próximos códigos ;-)

 

E quanto a sua solução infelizmente ela não resolveu o meu problema, agora o erro que está dando é o seguinte:

 

Uncaught TypeError: Cannot read property 'innerHtml' of null

 

O curioso é que no IEca funciona enquanto nos outros navegadores não =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, então agora é uma questão simples: o elemento que você passa como argumento "formulario" não está definido e o getElementById retorna null quando isso acontece. Como o null não tem uma propriedade "innerHtml", dá esse erro.

 

A solução é fazer uma verificação para ver se o elemento existe:

function VerificaChecks(checkBoxTodos, checkboxes, formulario, botao) {
	if (document.getElementById(formulario) != null) {
		var form = document.getElementById(formulario).innerHtml;
	} else {
		// lógica para quando o formulário não estiver definido
	}
	
	var qtd = 0;

	for (x = 0; x < form.length; x++) {
		if (form.elements[x].name.substr(0, checkboxes.length) == checkboxes) {			
			if (form.elements[x].checked) {
				qtd++;
			}
		}
	}

	if (qtd == 0) {
		document.getElementById(botao).disabled = true;
		document.getElementById(checkBoxTodos).checked = false;
	} else {
		document.getElementById(botao).disabled = false;
	}
}

Se o formulário deve estar definido sempre, aí já é um problema com o HTML.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enrico dei uma analisada no que você me passou e realmente deve ter algum problema com o html, pois ao fazer a verificação conforme você fez no código, o id do meu formulário não chega a nem entrar na condição caindo direto no else, sendo que depois fiz um teste passando o botão ao invés do formulário e diferentemente do formulário o botao entrou na condição.

 

Bom agora vou analisar o HTML para ver o que pode estar acontecendo.

 

Desde já obrigado e qualquer dúvida eu volto a postar ;-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.