Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Boa prática

Pessoal gostaria de uma força de vocês. Deixei a minha validação da seguinte forma:

if(peso <= 10 || peso >= 300 && altura <= 50 || altura >= 3.00){    
    alert("Peso ou altura inválidos"); 
    tdImc.textContent = "Inválido"; 
}else{
    tdImc.textContent = imc; 
}

Desta forma seria uma boa prática ? Teria alguma forma de pegar o campo que está inválido ?

1 resposta
solução!

Patric,

Quando utilizamos condiçoes temos que sempre analisa-la para verificar se esta trazendo o que queremos.

no caso que você descreve:

(peso <= 10 || peso >= 300 && altura <= 50 || altura >= 3.00)

Acredito que você queira como resposta verdadeira quando peso estiver entre 10 e 300 e a altura 0.50 e 3 correto?

Se sim esta logico não irá funcionar por dois fatores. O primeiro que o 50 esta em numero inteiro e na realidade é decimal.

E o segundo ponto é que quando utilizamos and && e or || na maioria das vezes devemos separar entre parenteses dependendo do resultado esperado.

Vamos avaliar a sentença quando for executador:

Primeiro será executado a validação peso<=10, se esta for verdadeira por padrão não se continua a validação pois a próxima condicional é or (||) desta forma não será validada a altura.

Ou seja a condição não será valida.

A condição correta seria:

((peso <= 10 || peso >= 300) && (altura <= 50 || altura >= 3.00)) Desta forma, primeiro verifica-se o peso e depois a altura.

Mas para ficar mais claro colocaria o codigo da seguinte forma:

if( (peso > 10 && peso < 300 ) && (altura > 0.50 && altura < 3.00)){ tdImc.textContent = imc; }else{ alert("Peso ou altura inválidos"); tdImc.textContent = "Inválido"; }

ou

if( peso > 10 && peso < 300 && altura > 0.50 && altura < 3.00){ tdImc.textContent = imc; }else{ alert("Peso ou altura inválidos"); tdImc.textContent = "Inválido"; }