Foros del Web » Programando para Internet » Javascript »

El formulario se salta la validacion

Estas en el tema de El formulario se salta la validacion en el foro de Javascript en Foros del Web. Hola de nuevo. Tengo un problema con un formulario que no quiere ser "validado". Me explico. El código del formulario sería el siguiente: Código: <form ...
  #1 (permalink)  
Antiguo 25/09/2007, 03:56
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
El formulario se salta la validacion

Hola de nuevo. Tengo un problema con un formulario que no quiere ser "validado". Me explico. El código del formulario sería el siguiente:

Código:
<form id="form" onsubmit="return validator(this);" action="....." method="post">
.
.
.
.
.
<button name='buttonsubmit' id='buttonsubmit' type='submit' onclick='changeDisabled();'>Enviar</button>
</form>
La funcion javascript "validator(this)" valida cada campo del formulario. Esta es la función que se está saltando cuando pincho sobre el botón de submit. Este botón, a su vez, cambia unos campos del formulario para que dejen de estar deshabilitados y se envíen junto con el rtesto de campos. Es fundamental que estos campos que tengo deshabilitados se encuentren así y que después se deshabiliten para que sean enviados.

Mi pregunta es, ¿hay algún problema con el procedimiento que estoy siguiendo?. Me refuero a ¿hay algún problema en llamar a una funcion javascript con el botón de enviar?. ¿Se pueden hacer las dos cosas, llamar a una funcion y enviar el formulario, con el mismo botón?.

Muchas gracias.
  #2 (permalink)  
Antiguo 25/09/2007, 06:03
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: El formulario se salta la validacion

Lo mejor es cambiar el type del submit de "submit" a "button". Luego en la función de validado, si todo va bién, haces un objForm.submit(), siendo objForm el objeto que referencia al formulario.
__________________
Kelpie
  #3 (permalink)  
Antiguo 25/09/2007, 07:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: El formulario se salta la validacion

Cita:
Iniciado por Kelpie Ver Mensaje
Lo mejor es cambiar el type del submit de "submit" a "button". Luego en la función de validado, si todo va bién, haces un objForm.submit(), siendo objForm el objeto que referencia al formulario.
¡No, no, no.... noooooo!

Sin un botón submit, el formulario no es accesible...(¡No digas eso Kelpie...!)

Tal vez sea mejor hacer los cambios (habilitar/deshabilitar) con el mismo sistema validador... sería cuestión de cambiar algo...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 26/09/2007, 00:30
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: El formulario se salta la validacion

Cita:
Tal vez sea mejor hacer los cambios (habilitar/deshabilitar) con el mismo sistema validador... sería cuestión de cambiar algo...
Muchas gracias a los dos por responderme. Lo que me comentas, caricatos, ya lo he probado y tampoco me funciona. No se que puede estar pasando porque realmente no es tan compllicado lo que quiero hacer, pero algo debe andar mal. ¿Se os ocurre qué puede estar pasando?.

Saludos y muchas gracias.
  #5 (permalink)  
Antiguo 26/09/2007, 00:48
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: El formulario se salta la validacion

He puesto un "alert" en la funcion de validacion y no salta. Esto quiere decir que no se esta llamando a dicha funcion ¿Por qué?, si se le está llamando en el atributo "onsubmit" del formulario.

Código:
<form id="form" onsubmit="return validator(this);" action="....." method="post">
¿Qué está ocurriendo?

PD: También he cambiado el button por un imput de tipo submit, pero la cosa sigue igual. Se que ambos hacen lo mismo, pero por probar..... Pero bueno, tampoco me ha servido.

Última edición por nemrp; 26/09/2007 a las 00:56
  #6 (permalink)  
Antiguo 26/09/2007, 00:56
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: El formulario se salta la validacion

Hola nemrp

¿Puedes poner el código del formulario y de las funciones validator() y changeDisabled()? A ver si haciendo pruebas damos con el fallo.

Saludos,
  #7 (permalink)  
Antiguo 26/09/2007, 01:43
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: El formulario se salta la validacion

El codigo del formulario es el siguiente:

Código:
<form id="form" onsubmit="return validator(this);" action="....." method="post">
		<fieldset>
			<legend>Legend1</legend>
			<table align="center">
				<tr>
					<td colspan="5">
						Input1: <input type="text" name="input1" id="input1" size="7" disabled="disabled"/>
						Input2: <input type="text" name="input2" id="input2" size="7" disabled="disabled"/>
					</td>
				</tr>
				<tr>
					<td>Tipo:</td>
					<td><input type="radio" name="radiotipo" id="addinfo1" onclick="showInfo(1);"/>addinfo1</td>
					<td><input type="radio" name="radiotipo" id="addinfo2" onclick="showInfo(2);"/>addinfo2</td>
					<td><input type="radio" name="radiotipo" id="addinfo3" onclick="showInfo(3);"/>addinfo3</td>
					<td><input type="radio" name="radiotipo" id="addinfo4" onclick="showInfo(4);"/>addinfo4</td>
				</tr>
				<tr>
					<td><input type="hidden" name="inputhidden1" id="inputhidden1"/></td>
				</tr>
			</table>
			<div id="info"></div><!--En este div se mostrara la tabla segun la eleccion del radio-->
		</fieldset>
		</form>
Ciando se selecciona uno de los radio se añade codigo html en el div "info". En este codigo html esta el boton y los campos para cada tipo de radio. Pero es sólo eso, código html. Te pongo un trozo del codigo porque entero va a ser demasiado grande:

Código:
function showInfo(tipo){
	var tabla1 = "<table align='left'><tr><td colspan='5'><hr /></td></tr><tr><td>";
	var tabla2 = "</td></tr><tr align='center'><td colspan='6'><button name='buttonsubmit' id='buttonsubmit' type='submit' onclick='changeDisabled();'>Enviar</button></td></tr></table>";
	var tabla; //Cadena de texto que almacenara la construccion de la tabla segun el radio seleccionado
	
	switch(tipo){
		case (1):
			window.resizeTo(430, 410);
			tabla = tabla1;
			tabla += "....."; //aqui va codigo html continuando la tabla con inputs en cada celda
			tabla += tabla2;
			break;
		case(2):
			window.resizeTo(430, 410);
			tabla = tabla1;
			tabla += "....."; //aqui va codigo html continuando la tabla con inputs en cada celda
			tabla += tabla2;
			break;
		case (3):
			window.resizeTo(430, 410);
			tabla = tabla1;
			tabla += "....."; //aqui va codigo html continuando la tabla con inputs en cada celda
			tabla += tabla2;
			break;
		case (4):
			window.resizeTo(440, 470);
			tabla = tabla1;
			tabla += "....."; //aqui va codigo html continuando la tabla con inputs en cada celda
			tabla += tabla2;
			break
		default:
			break;	
	}

	document.getElementById("info").innerHTML = tabla;
	document.getElementById("inputhidden1").value = tipo;
}
La función de validación tiene mucha casuística por lo que su codigo es bastante grande. En realidad, lo único que hago en ella es preguntar si un campo está vacío. Si es así, añado una cadena de texto a un array que más tarde presentaré en un "alert". Además, cambio el color de aquellos campos que están vacíos accediendo a sus "style". por ejemplo:

Código:
if (form.campo1.value == ""){
			errores.push("Debe introducir un valor en el  campo1");
			form.campo1.style.background = "#FF0000";
			form.campo1.style.color = "#FFFFFF";
		} else {
			form.campo1.style.background = "#FFFFFF";
			form.campo1.style.color = "#000000";
		}
Este es un ejemplo del código que hay en esta función. Este se repite muchas veces para distintos campos. Además, esta función tiene al final lo siguiente:

Código:
if (errores.length != 0){
		tratarErrores(errores);
	} else {
		res = true;
		//Habilito ciertos campos
		document.getElementById("input1").disabled = false;
		document.getElementById("input2").disabled = false;
	}

	return res;
La función tratarErrores sólo contiene un recorrido del array mostrando en un alert todos aquellas cadenas de texto que contenga dicho array.

Esto es todo. Quizás sea algo enreversado, pero la idea es muy simple. A ver si me puedes ayudar JavierB porque el problema que estoy teniendo es que no se está llamando a la funcion validar una vez que se hace el submit, tenga o no el botón una llamada a otra función (changeDisabled, que hace lo mismo que hay en el else de validator).

¡Nuf!, menuda parrafada, lo siento JavierB.
  #8 (permalink)  
Antiguo 26/09/2007, 02:43
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: El formulario se salta la validacion

Hola:

En el código que adjuntas no se ve el botón submit, pero supongo que es como lo has indicado antes... si el código changeDisabed() es el mismo del else del validator, entonces es redundante ya que un botón submit siempre va a hacer saltar el script definido en manejador de eventos onsubmit del form...
Además si ese changeDisabled() puede devolver true/false estás con un código ambiguo (no recomendable)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #9 (permalink)  
Antiguo 26/09/2007, 03:04
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: El formulario se salta la validacion

Si, el botón submit está en la variable "tabla2", dentro de la funcion "showInfo". He probado a hacer la llamada de "changeDisabled" en el botón submit, también he probado a hacer una llamada a esta función desde la función de validación (quitandola del botón) y también he probado a poner el código de "changeDisabled" una vez se termina la validación correctamente (quitando la llamada a esta función del botón submit). Nunca tengo las dos cosas a la vez.

Os pongo aquí el código de "changeDisabled" que, como vereis, es el mismo que uso al final de la función de validación si todo fue bien. Pero nunca uso las dos cosas a la vez.

Código:
function changeDisabled(){ 
	document.getElementById("input1").disabled = false;
	document.getElementById("input2").disabled = false;
}
El problema que tengo es que no se está entrando en la función de validar porque he puesto un alert y no salta.
  #10 (permalink)  
Antiguo 26/09/2007, 03:54
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: El formulario se salta la validacion

Hola:

Es muy raro que no entre.... en lo que acabas de poner está la etiqueta de cierre del formulario...

¿No tendrás el botón submit fuera del formulario ?... sé que no sería normal, pero no sabes cuantos errores tontos como ese dan problemas...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #11 (permalink)  
Antiguo 26/09/2007, 04:16
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: El formulario se salta la validacion

Sí que es raro. El caso es ese, que es como si no se llamara a la funcion de validacion cuando se pincha encima del boton submit. Fíjate en el codigo del formulario, que ya puse en un mensjae anterior:

Código:
<form id="form" onsubmit="return validator(this);" action="....." method="post">
		<fieldset>
			<legend>Legend1</legend>
			<table align="center">
				<tr>
					<td colspan="5">
						Input1: <input type="text" name="input1" id="input1" size="7" disabled="disabled"/>
						Input2: <input type="text" name="input2" id="input2" size="7" disabled="disabled"/>
					</td>
				</tr>
				<tr>
					<td>Tipo:</td>
					<td><input type="radio" name="radiotipo" id="addinfo1" onclick="showInfo(1);"/>addinfo1</td>
					<td><input type="radio" name="radiotipo" id="addinfo2" onclick="showInfo(2);"/>addinfo2</td>
					<td><input type="radio" name="radiotipo" id="addinfo3" onclick="showInfo(3);"/>addinfo3</td>
					<td><input type="radio" name="radiotipo" id="addinfo4" onclick="showInfo(4);"/>addinfo4</td>
				</tr>
				<tr>
					<td><input type="hidden" name="inputhidden1" id="inputhidden1"/></td>
				</tr>
			</table>
			<div id="info"></div><!--En este div se mostrara la tabla segun la eleccion del radio-->
		</fieldset>
</form>
La etiqueta del cierre del formulario está y el botón se añade en el div "info", que está dentro del formulario. Algo debe haber ocurrido porque el algún momento sí que se llamaba a la función y se mostraba todo como yo quería (un alerte con los fallos y los campos vacío en rojo), pero desde unos días dejó de funcionar.

Este tipo de fallos se que se deben a que algo habré tocado pero por más que busco no encuentro nada raro y lo más raro aún es que ni aún poniendo un alert en la función de validación éste salta. Es decir, no se le está llamando.

Tengo que decir, que creo que no lo he comentado antes, que la función de validación está en un archivo externo y que la importo en el head de la página. Pero bueno, aquí no debe estar el problema porque hace una semana me funcionaba.
  #12 (permalink)  
Antiguo 26/09/2007, 07:45
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: El formulario se salta la validacion

Primero: Caricatos, no te pongas así. Asumo mi culpa y pido perdón. No se repetirá...

Segundo: No acabo de entender el problema (soy duro de mollera). He copiado los pedazos de código que ha publicado nemrp, he añadido un par de líneas en su puntos supensivos y he rellenado un poco la función validator(), y a mi SI me funciona. Esto es lo que he apañado:

Código HTML:
<html>
<head>
	<title>Untitled</title>

	<script>
	function changeDisabled(){ 
		document.getElementById("input1").disabled = false;
		document.getElementById("input2").disabled = false;
	}
	function validator(form){
		res=false;  //Lo he tomado de otro pedazo
		if (form.campo1.value == ""){
				//errores.push("Debe introducir un valor en el  campo1");
				form.campo1.style.background = "#FF0000";
				form.campo1.style.color = "#FFFFFF";
				res=false;
			} else {
				form.campo1.style.background = "#FFFFFF";
				form.campo1.style.color = "#000000";
				res=true;
			}
			
			
			//No tengo el código de mostrar los errores
			//¿Estará ahí el problema?
			if (!res) alert("Rellena los campos, pasmao!!");
			return (res);
	}
	
	function showInfo(tipo){
		var tabla1 = "<table align='left'><tr><td colspan='5'><hr /></td></tr><tr><td>";
		var tabla2 = "</td></tr><tr align='center'><td colspan='6'><button name='buttonsubmit' id='buttonsubmit' type='submit' onclick='changeDisabled();'>Enviar</button></td></tr></table>";
		var tabla; //Cadena de texto que almacenara la construccion de la tabla segun el radio seleccionado
		
		switch(tipo){
			case (1):
				window.resizeTo(430, 410);
				tabla = tabla1;
				tabla += "<input type='text' name='campo1'>"; //Por poner uno...
				tabla += tabla2;
				break;
			case(2):
				window.resizeTo(430, 410);
				tabla = tabla1;
				tabla += "<input type='text' name='campo1'>"; //Por poner uno...
				tabla += tabla2;
				break;
			case (3):
				window.resizeTo(430, 410);
				tabla = tabla1;
				tabla += "<input type='text' name='campo1'>"; //Por poner uno...
				tabla += tabla2;
				break;
			case (4):
				window.resizeTo(440, 470);
				tabla = tabla1;
				tabla += "<input type='text' name='campo1'>"; //Por poner uno...
				tabla += tabla2;
				break
			default:
				break;	
		}
	
		document.getElementById("info").innerHTML = tabla;
		document.getElementById("inputhidden1").value = tipo;
	}
	
	
	</script>

</head>

<body>

	<!-- El action es cosecha propia. -->
	<form id="form" onsubmit="return validator(this);" action="prb001.php" method="post">
			<fieldset>
				<legend>Legend1</legend>
				<table align="center">
					<tr>
						<td colspan="5">
							Input1: <input type="text" name="input1" id="input1" size="7" disabled="disabled"/>
							Input2: <input type="text" name="input2" id="input2" size="7" disabled="disabled"/>
						</td>
					</tr>
					<tr>
						<td>Tipo:</td>
						<td><input type="radio" name="radiotipo" id="addinfo1" onclick="showInfo(1);"/>addinfo1</td>
						<td><input type="radio" name="radiotipo" id="addinfo2" onclick="showInfo(2);"/>addinfo2</td>
						<td><input type="radio" name="radiotipo" id="addinfo3" onclick="showInfo(3);"/>addinfo3</td>
						<td><input type="radio" name="radiotipo" id="addinfo4" onclick="showInfo(4);"/>addinfo4</td>
					</tr>
					<tr>
						<td><input type="hidden" name="inputhidden1" id="inputhidden1"/></td>
					</tr>
				</table>
				<div id="info"></div><!--En este div se mostrara la tabla segun la eleccion del radio-->
			</fieldset>
			</form>
		
		</body>
</html> 
Algo me habré dajado ¿no? Y el problema puede estar en lo que me he dejado...
__________________
Kelpie
  #13 (permalink)  
Antiguo 26/09/2007, 08:40
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: El formulario se salta la validacion

Cita:
Iniciado por Kelpie Ver Mensaje
Primero: Caricatos, no te pongas así. Asumo mi culpa y pido perdón. No se repetirá...

...
A veces parezco duro... ¡A que sí...!

Si supieras las veces que me reprocharon afirmaciones como la que tú has hecho... lo importante es aprender... y eso de las webs accesibles tenemos que aprenderlo (aunque no siempre lo apliquemos)

nemrp: si puedes subir tu página, danos la url para verla, porque no es normal tu poblema...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #14 (permalink)  
Antiguo 27/09/2007, 02:58
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: El formulario se salta la validacion

Bueno, pues ya conseguí encontrar el problema. Para que la validación en servidor fuera más sencilla cambié el id de un input que se repetía en cuatro sitios. Antes de este cambio tenían ids distintos, porque realmente indican cosas distintas, pero como en la validación en servidor y en su tratamiento posterior daba lo mismo si se llamaban igual o diferente, pues cambién el nombre y así podía usar la misma función de validación para los cuatro.

Este cambio lo realicé en la función "showInfo", que es la encargada de mostrar el formulario, pero no hice el cambio en la función "validator". ¡Olvido descomunal!.

AHora se me está presentando otro error curioso, pero al menos me está funcionando. El problema que se me presenta es que si pongo la función de validación en el head de la página, se realiza sin problemas, tanto en IE como en Firefox. Pero si la llevo a un archivo ".js" externo ya sólo funciona con Firefox.

A mi lo que me interesaría es que estuviera en un archivo externo, porque la validación, como ya dije, tiene mucha casuística y es muy grande, por lo que no me gustaría que se pudiese ver ya que tiene mucho código y es muy fea.

Muchas gracias a los dos por ayudarme. A ver si se os ocurre cómo solucionar este pequeño fallo.

PD para caricatos: No puedo colgar la página en ningún sitio que sea visible para el "resto del mundo". Ahora mismo trabajo en local y el único sitio donde la puedo colgar no es accesible.
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 19:38.