Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/11/2009, 03:26
Groznak
 
Fecha de Ingreso: noviembre-2009
Mensajes: 1
Antigüedad: 15 años, 2 meses
Puntos: 0
Cancelar onchange() cuando sucede onsubmit()

Hola,

tengo un pequeño problema con una sección de código de un formulario que estoy realizando que puede aceptar la introducción de datos tanto manual como desde un lector de código de barras de una PDA.

El código es el siguiente:

Código:
<form action="consultar_modelo_resultado.php" method="get">
	<label for="codigo">EAN13:</label>
	<input type="text" name="codigo" id="codigo_id" value="{codigo}">
	<input type="button" name="consultar" value="Consultar" style="margin-top: 5px;" onclick="ValidarFormulario()">
</form>

<script type="text/javascript">
//<!--

codigo = document.getElementById("codigo_id");

function ValidarFormulario(){
	form = document.forms[0];
	if(codigo.value.length != 13){
		setTimeout('codigo.select()', 100);
		alert("Debe introducir un código EAN13 válido.");
		return false;
	} else {
		form.submit();
	}
}

document.forms[0].onsubmit = function(){
	ValidarFormulario();
	return false;
}

codigo.onchange = function(){
	ValidarFormulario();
}

codigo.select();

//-->
</script>
El problema es que cuando introduzco datos en el campo "codigo" y pulso la tecla "entrar" se ejecuta dos veces la función ValidarFormulario().

Me gustaría saber si hay alguna manera de aislar los eventos, es decir, que cuando le de al "entrar" y se lanze el onsubmit() no se ejecute también el onchange() ya que no es necesario porque repite la llamada a la función.

Había pensado en capturar el evento onchange() dentro de la función onsumbit() y cancelarlo pero no me ha funcionado nada de lo que he probado y el resto de soluciones que me viene a la cabeza me dan la sensación de ser demasiado complicadas.

¿Se les ocurre alguna alternativa?

Muchas gracias.

Un saludo.