Foros del Web » Programando para Internet » Javascript »

Cancelar onchange() cuando sucede onsubmit()

Estas en el tema de Cancelar onchange() cuando sucede onsubmit() en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/11/2009, 03:26
 
Fecha de Ingreso: noviembre-2009
Mensajes: 1
Antigüedad: 14 años, 5 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.
  #2 (permalink)  
Antiguo 19/11/2009, 06:26
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Cancelar onchange() cuando sucede onsubmit()

en el onchangue quita esa funcion y manda el submit del form, luego en la funcion de validacion del formsi quieres cancelar el envio del mismo devuelve false:

Código HTML:
<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(); //NO
		return true;// si el DELEGADO que controla el evento recibe true, envia el form.
	}
}

document.forms[0].onsubmit = function(){
	return ValidarFormulario(); //devuelve el resultado de la validación al DELEGADO
}

codigo.onchange = function(){
	//ValidarFormulario(); //NO
	document.forms[0].submit();//enviar
}

codigo.select();

//-->
</script> 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:14.