Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

Onblur, Onchange ou qual?

Recommended Posts

Ola pessoal.

 

Estou em um form de compras de produtos e, junto aos dados do produto, tambem informo a qantidade em estoque.

 

Gostaria de fazer um filtro para, caso o usuario digite um valor maior do que esta no estoque de um alert e não permita prosseguir.

 

Fiz assim:

<script type="application/javascript">
 function veta_quantidade(campo, estoque)
 {
  alert(campo);
  alert(estoque);
  alert(document.getElementById(campo).value);

  if(document.getElementById(campo).value<estoque)
  {
	  alert('Observe a quantidade em estoque\nSó tem '+estoque);
  }

  document.getElementById(campo).focus();
  return false;
 }
</script>


<input style=\"text-align:right\" type=TEXT id=". $id ."  name=". $id ." size=2 onblur='veta_quantidade(this,'$estoque');' value=". $_SESSION["MeuCarrinho"]->ObtemQuantidadeItem($id) .">
</script>

Tentei com onblur e onchande. Simplesmente nada acontece.

 

Nem mesmo os alerts antes de iniciar a validação(if()), funcionam e tambem não retorna erro.

 

Ambos os valores passados à função são inteiros. O que esta de errado?

 

Obrigado a quem puder ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estes, são chamados de eventos, o evento onBlur, é quando um campo perde o foco, e o onChange, é quando um campo muda de valor. Tente da seguinte forma:

 

<script type="application/javascript">
function veta_quantidade(campo, estoque)
{
	alert(campo);
	alert(estoque);
	alert(document.getElementById(campo).value);

if(document.getElementById(campo).value<estoque)
{
	alert('Observe a quantidade em estoque\nSó tem '+estoque);
}

document.getElementById(campo).focus();
	return false;
}
</script>
<input style="text-align:righ;t" type="text" id="<?php echo $id;?>"  name="<?php echo $id;?>" size="2" onchange='veta_quantidade(<?php echo $id;?>,'<?php echo $estoque;?>');' value="<?php echo $_SESSION["MeuCarrinho"]->ObtemQuantidadeItem($id);?>">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas foi assim que eu fiz. A unica diferença foi que, aqui no post, não mencionei que o input type text esta dentro de um echo.

 

Diz assim:

O valor da propriedade 'veta_quantidade' é nulo ou não definido; não é um objeto de Função 

 

Acho que deve ter alguma coisa a ver com conversão de valores para operçoes matematicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal veja com esse exemplo

 

$(document).ready(function(){

$("input#valor1").change(function(){

 

if(($("input#valor1").val()) >($("input#valor2").val())){

 

alert('valor1 é maior que o valor2')

return false;

}

 

});

});

 

<form name="form" id="form">

 

Valor1:<input id="valor1" name="valor1" type="text"/>

Valor2:<input id="valor2" name="valor2" type="text" />

</form>

 

Tentei utilizar o keyup, mas não ficou legal, mas com chage funciona de boa. ok abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu problema agora esta em comparar os dois valores.

Parece que tem que converter string(passada por parametro para inteiro.

 

<script type="application/javascript">
 function veta_quantidade(campo, estoque)
 {
  if(eval(document.getElementById(campo).value)<eval(estoque))
  {
	  alert('Observe a quantidade em estoque\nSó tem '+estoque);
  }
  document.getElementById(campo).focus();
  return false;
 }
</script>

Ainda não deu certo

 

Do jeito abaixo até que deu o alert e funcionou.

Mas não estou conseguindo barrar a execuçao do codigo

<script type="application/javascript">
 function veta_quantidade(campo, estoque)
 {
  if(document.getElementById(campo).value>estoque==true)
  {
	  alert('Observe a quantidade em estoque\nSó tem '+estoque);
  }
  document.getElementById(campo).focus;
  return false;
 }
</script>

 

 

Mesmo assim, no firefox.

 

No ie ainda continua dando erro

 O valor da propriedade 'veta_quantidade' é nulo ou não definido; não é um objeto de Função 

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você esta querendo fazer comparação de 2 campos, esse exemplo resolve, você também pode inserer esse codigo( nome_do_formulário.nome_do_campo.focus();) abaixo do alert.

Obs:import o jquery para funcionar esse exemplo

 

$(document).ready(function(){

$("input#valor1").change(function(){

 

if(($("input#valor1").val()) >($("input#valor2").val())){

 

alert('valor1 é maior que o valor2')

return false;

}

 

});

});

 

<form name="form" id="form">

 

Valor1:<input id="valor1" name="valor1" type="text"/>

Valor2:<input id="valor2" name="valor2" type="text" />

</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não uso muito Jquery.

 

por isso tenho la meus receios.

Como mudo esse input#valor1 para uma variavel passada por parametro que entrega o id co campo?

 

Outra coisa.

 

Essa funçao esta funcionando. O erro dela é só não dar foco no campo e, no Internte Exploree, da o erro relatado acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você não esta acostumado a usar jquery e seu exemplo esta funcionando só faltando o focus, use esse nome_do_formulário.nome_do_campo.focus() abaixo do alert, lembrando de colocar o nome de seu formulário e o nome do seu campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só que no ie não funciona.

 

Como faz para trocar o que te perguntei anteriormente?

 

nome do id passado por parametro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

para você pegar o valor de um campo em jquery e javaScript

form

Valor1:<input id="valor1" name="valor1" type="text"/>

 

pegar em jquery

$('#valor1').val();

 

pegar em javaScript

document.getElementByid('valor1').value();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oh }Anderson.

 

Isso ai é basico.

 

Quero saber por passagem de parametro.

 

Não da pra saber qual será a id que precisará ser validada. Então, passo ela por parametro.

 

funcao(id,valor);

 

E aqui:

 

$('#valor1').val();

 

Como troco esse valor1 por uma parametro?

Só tira as aspas como no js?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quanto ao ie, troquei:

 

<script type="application/javascript">

 

por somente

 

<script>

 

resolveu.

 

Mas isso não é suficiente para não permitir ao cli enviar o form ainda.

 

De repente veio a ideia de pegar o valor por aqui.

 

Mas não vem:

 

O que eu fiz: criei o input text e um input hiden com o name do text mais um hd antes.

 


 function veta_quantidade(form)
 {
with (form) 
{
 for (var i=0; i < elements.length; i++) 
 {
	 nome = elements[i].name;

   if (elements[nome].value > elements['hd' + nome].value)
   {
	   alert(nome);
	   alert('Observe a quantidade em estoque\nSó tem '+ elements['hd' + i + ''].value);
   }
 elements[nome].focus();
 return false;
 }
 }

 

Consegui

<script>
 function veta_quantidade(form)
 {
with (form) 
{
 for (var i=0; i < elements.length; i++) 
 {
   nome = elements[i].name;
   if (document.getElementById(nome).value > document.getElementById('hd'+nome).value)
   {
	   alert('Observe um dos produtos do carrinho\nVocê adicionou '+document.getElementById(nome).value+' \nPorem, só tem '+ document.getElementById('hd'+nome).value);
   }
 document.getElementById(nome).focus();
 return false;
 }
 }
}
</script>

 

Não, não deu certo.

Só funcionou com um campo.

 

Meu form tem.

 

'n' campos type text. A mesma quanidade de campos hidden.

e um botão submit

 

Preciso saber quantos campos hidden tem para prosseguir a validaçao.

Tentei assim:

 function valida_carrinho(form)
 {
with (form) 
{
    for (var i=0; i < elements.typeof("hidden").length; i++) 
 {
   nome = elements[i].name;
   alert(nome);
   if ((document.getElementById(nome).type=="text")||(document.getElementById(nome).type=="hidden"))
   {
	 if (document.getElementById(nome).value > document.getElementById('hd'+nome).value)
	 {
		 alert('Observe um dos produtos do carrinho\nVocê adicionou '+document.getElementById(nome).value+' \nPorem, só tem '+ document.getElementById('hd'+nome).value);
		 document.getElementById(nome).focus();
		 return false;		   
	 }	 
   }
 }
 }
}

Mas não consigo filtrar o numero de campos hidden

 

Bom, meu form é esse abaixo:

para cada produto adicionado ao carrinho, eu crio um campo input que receberá o mesmo id e name do campo que carrega a quantidade de itens do produto porem trazendo o estoque daquele produto para comparar com a quantidade que o usuario adicionou.

<form method="post" action="altera_carrinho.php?op=atualizar" id="form_carrinho" name="form_carrinho">
 <tr>
<td align='left'><font size=-1>Doce de Menta</font></td>
<td align='center'><font size=-1>20</font></td>
<td align='center'>R$ 3.24 </td>
<td align='center'>
  <input style=\"text-align:right\" type="text" id="8"  name="8" size="2" value="20" onkeypress="BloqueiaLetras();" />
  <input type="hidden" id="hd8" name="hd8" value="20"
  </td>
<td align='center'>R$ 64.80</td>		  
<td align='center'><b><a href="carrinho.php?op=excluir&id_prod=8">Excluir</a></b></td>
 </tr>

 <tr>
<td align='left'><font size=-1>Pós de Mico Boa Sorte</font></td>
<td align='center'><font size=-1>35</font></td>
<td align='center'>R$ 2.33 </td>
<td align='center'>
  <input style=\"text-align:right\" type="text" id="7"  name="7" size="2" value="20" onkeypress="BloqueiaLetras();" />
  <input type="hidden" id="hd7" name="hd7" value="35"
  </td>
<td align='center'>R$ 46.60</td>		  
<td align='center'><b><a href="carrinho.php?op=excluir&id_prod=7">Excluir</a></b></td>
 </tr>
 <tr>
 <tr>
  <td align="center" colspan="7"> 
	 <input type="button"  onclick="return valida_carrinho(this.form, 2)" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" /><br>
  </td>
 </tr>  
</form>

É isso que eu preciso fazer.

Nesse caso ai, produtos inventados, tem dois produtos

 

Ninguem?

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.