Ir para conteúdo

POWERED BY:

Arquivado

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

Claudio Neto

[Resolvido] Função com erro em if e numeral

Recommended Posts

Bom dia. Tenho uma função que pega o valor que foi escolhido em uma rádio, altera esse valor e põe em um hidden.

 

A primeira parte da função está funcionando normalmente. Onde está dando erro, é na parte de baixo, nos ifs.

 

Segue função:

 

<!--
//Definindo as variáveis:	
var objRadio;
var i;
var checado = 0;
var str;

function validarForm() {
objRadio = document.forms["envia_amex"].elements["OpcPagamento"];
	
	for (i=0; i < objRadio.length; i++) {
		if (objRadio[i].checked == true) {
			str = objRadio[i].value;
			document.getElementById("strParcelas").value = str.substr(2,2);
		//Apenas alguns alertas
		//alert("O valor do radio button é: "+objRadio[i].value);
		//alert("O valor da string completa será: "+document.getElementById("strTid").value);
		//Alterando o valor do hidden;
		//Caso algum item tenha sido checado, será atribuído
		//um valor diferente de "0" à variável checado;
		checado = 1;
		//return false;
		}
	}
	if (str.substr(2,2) <= 6) {
		if (str.substr(2,2) = 1){
			document.getElementById("strParcelas").value = '';
			document.getElementById("jurosdequem").value = '';
		} else {
			document.getElementById("jurosdequem").value = 'PlanN';
		}
	} else {
		document.getElementById("jurosdequem").value = 'PlanAMEX';
	}
}
-->

document.getElementById("strParcelas").value e document.getElementById("jurosdequem").value sempre estão sendo passados vazios.

 

O str recebe o valor assim: "2002" ou "2003" ou "2004". Então str.substr(2,2) é igual "02" ou "03" ou "04". Acredito que talvez por isso que quando comparo com 6 ou 1, não me dá o retorno esperado, pois estou comparando uma string com um numeral. Minha teoria está certo?

 

Tentei fazer parseInt(str.substr(2,2)) mas também não de certo.

 

Alguém sabe me dizer o que há de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O if está fora do "for", é isso mesmo?

Não estou vendo em qual momento o str está armazenando o valor da string... por isso creio que deveria ter ficado dentro do "for"...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, está fora do for propositalmente, pois isso é para ser verificado após terminar o for, e não dentro dele.

 

O str só está recebendo o valor dentro do for mesmo. Porque? Quando sai dor for, o valor é apagado? Mesmo ainda estando dentro da mesmo função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se acontece apenas comigo, mas a conversão de "09" para inteiro com parseInt me retorna sempre 0 (zero). Fiz vários testes aqui e só retornou 0 quando uso substr(2,2) no valor "2009".

O jeito foi deixar como string mesmo, embora com parseFloat tenha funcionado adequadamente. Se preferir, converta para número com parseFloat posteriormente.

 

Após refazer alguns trechos, obtive o seguinte código (está funcionando no IE7):

<html>
<head>
<title></title>
<script type="text/javascript">
<!--
//Definindo as variáveis:	
var objRadio,i,str;
var checado = 0;

function validarForm() {
objRadio = document.forms["envia_amex"].elements["OpcPagamento"];
	
	for (i=0; i < objRadio.length; i++) {
		if (objRadio[i].checked == true) {
			str = objRadio[i].value.substr(2,2);
			document.getElementById("strParcelas").value = str;
		//Caso algum item tenha sido checado, será atribuído
		//um valor diferente de "0" à variável checado;
		checado = 1;
		//return false;
		}
	}
	if (str <= 6) {
		if (str == 1){
			document.getElementById("strParcelas").value = '';
			document.getElementById("jurosdequem").value = '';
		} else {
			document.getElementById("jurosdequem").value = 'PlanN';
		}
	} else {
		document.getElementById("jurosdequem").value = 'PlanAMEX';
	}
}
-->
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar com parseFloat. Mas fiquei em dúvida nesse código que postou ai.

 

Você está comparando somente o str, acho que errou né, deveria estar comparando o str.substr(2,2). E mesmo assim, você está comparando com 6, isso dá certo? Pois str.substr(2,2) é uma string, posso comparar assim com um número sem colocá-lo entre aspas?

 

Já digo o resultado sobre o parseFloat.

 

Por hora, muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui, o resultado final ficou assim:

 

function validarForm() {
objRadio = document.forms["envia_amex"].elements["OpcPagamento"];
	
	for (i=0; i < objRadio.length; i++) {
		if (objRadio[i].checked == true) {
			str = objRadio[i].value;
			document.getElementById("strParcelas").value = str.substr(2,2);
			checado = 1;
			//parc = parseFloat(str.substr(2,2))
			//alert("A quantidade de parcelas é: " + parseFloat(str.substr(2,2)));
			//return false;
			if (parseFloat(str.substr(2,2)) <= 6) {
				if (parseFloat(str.substr(2,2)) == 1){
					//document.getElementById("strParcelas").value = '01';
					document.getElementById("jurosdequem").value = '';
				} else {
					document.getElementById("jurosdequem").value = 'PlanN';
					//alert("A forma de juros é: PlanN");
				}
			} else {
				document.getElementById("jurosdequem").value = 'PlanAMEX';
				//alert("A forma de juros é: PlanAMEX");
			}
			//return false;
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está comparando somente o str, acho que errou né, deveria estar comparando o str.substr(2,2).

Nops, é isso mesmo... meu código está correto, testado e funcionando... Perceba bem que a primeira coisa que fiz foi justamente pegar a parte específica de "objRadio.value" na linha 15, e armazenar essa parte na variável "str":

 

str = objRadio[i].value.substr(2,2);
Uma vez que tenho str armazenado, não há necessidade de ficar digitando substr o tempo todo. Já tenho os pedaços que desejo comparar, logo, nos blocos condicionais posso perfeitamente verificar a condição utilizando apenas a variável str.

 

E mesmo assim, você está comparando com 6, isso dá certo? Pois str.substr(2,2) é uma string, posso comparar assim com um número sem colocá-lo entre aspas?

Como eu disse anteriormente, no IE7 funcionou perfeitamente. No entanto, eu converteria para ponto flutuante para melhor legibilidade do código.

 

Consegui, o resultado final ficou assim:

Ok então...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, não tinha me atentado que já tinha pego a parte específica anteriormente.

 

Não cheguei a testar no IE7, mas no firefox não estava dando certo sem transformar não.

 

Obrigado pela ajuda novamente.

 

Abraços...

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.