Foros del Web » Programando para Internet » Javascript »

[AYUDA]Validar form, problema con el submit

Estas en el tema de [AYUDA]Validar form, problema con el submit en el foro de Javascript en Foros del Web. hola gente tengo un problema con un script en realidad soy nuevo en esta asi que si la pregunta es muy basica les pido disculpas ...
  #1 (permalink)  
Antiguo 20/08/2006, 21:38
 
Fecha de Ingreso: agosto-2006
Mensajes: 22
Antigüedad: 17 años, 9 meses
Puntos: 0
[AYUDA]Validar form, problema con el submit

hola gente
tengo un problema con un script
en realidad soy nuevo en esta asi que
si la pregunta es muy basica les pido disculpas

el problema es el siguiente
el script lo que hace es
validar un formulario,
osea, que no queden campos en vacio
que se ingrese el tipo de dato correcto
y me faltaria el del mail, que todavia lo tengo
que pensar

el problema es esta, el script todo bien, comprueba
todo y me da el mensajito si algo esta mal
pero, suceden 2 errores

aunque haya algun error, despues de mostrarme
el cartelito (por ejemplo "Tiene que escribir su nombre")
luego de darle aceptar, aun asi realiza el submit del form.
eso pasa cuando pongo
el onclic en las etiqueta <form>

el otro error, sucede de la forma contraria,
realiza todas las validaciones, todo bien,
si hay error, muestra el mensajito y no hace
nada, pero si todo esta bien, osea, todos
los datos correcto, no realiza el submit del
formulario
esto sucede cuando pongo el onclic
en la etiqueta el boton submit del formulario

espero que se haya entendido
si alguien me puede decir
como debo poner el javascript
para que solo haga el submit cuanto
el formulario esta bien completado y nada
mas

adjuntos el codigo, sin el evento onclic en ningun
lado, ya que no se donde debo ponerlo

desde ya gracias


Código:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Encuesta de Marcas --->Registracion</title>

<?php
session_start();
if ($_SESSION['estilo']==2) {
echo '<link href="miestilo.css" rel="stylesheet" type="text/css" />';}
?>

<script type="text/javascript">
function validarEntero(valor){ 
      //intento convertir a entero. 
     //si era un entero no le afecta, si no lo era lo intenta convertir 
     valor = parseInt(valor) 

      //Compruebo si es un valor numérico 
      if (isNaN(valor)) { 
            //entonces (no es numero) devuelvo el valor cadena vacia 
            return "" 
      }else{ 
            //En caso contrario (Si era un número) devuelvo el valor 
            return valor 
      } 
} 

function valida_envia(){
	//valido que ningun campo quede vacio
	if (document.registro.Nombre.value.length==0){
		alert("Tiene que escribir su nombre")
		document.registro.Nombre.focus()
		return (false);
	}
	if (document.registro.Apellido.value.length==0){
		alert("Tiene que escribir su apellido")
		document.registro.Apellido.focus()
		return (false);
	}	
	if (document.registro.Nacion.value.length==0){
		alert("Tiene que escribir su nacionalidad")
		document.registro.Nacion.focus()
		return (false);
	}
	if (document.registro.user.value.length==0){
		alert("Tiene que escribir su Nombre de usuario")
		document.registro.user.focus()
		return (false);	
	}
	if (document.registro.pass1.value.length==0){
		alert("Tiene que escribir un Password")
		document.registro.pass1.focus()
		return (false);	
	}
		if (document.registro.email1.value.length==0){
		alert("Tiene que escribir su email")
		document.registro.email1.focus()
		return (false);	
	}
	
	//valido la edad. tiene que ser entero mayor que 18
	edad = document.registro.Edad.value
	edad = validarEntero(edad)
	document.registro.Edad.value=edad
	if (edad==""){
		alert("Tiene que introducir un número entero en su edad.")
		document.registro.Edad.focus()
		return (false);
	}
	
	//valido que los pass sean iguales
	if(document.registro.pass1.value!=document.registro.pass2.value){
		alert("Los password no cohinciden")
		return (false);
	}
	//valido que los emails sean iguales
	if(document.registro.email1.value!=document.registro.email2.value){
		alert("Los emails no cohinciden")
		return (false);
	}
}
</script>

</head>

<body>


<img src="img/under-construction.gif" width="680" height="492" alt="En construccion"/>
<h2>Registracion</h2>
<form name="registro" method="post" action="doreg.php">

<fieldset><legend>Datos Personales</legend>

	<table><tr><td colspan="2">Nombre: <input type="text" name="Nombre" /><br/>
	Apellido: <input type="text" name="Apellido" /><br/>
	Edad: <input type="text" name="Edad" /><br/>
	Nacionalidad: <input type="text" name="Nacion" />
	</td></tr></table>

</fieldset>

<fieldset><legend>Datos Usuario</legend>

	<table><tr><td>Nombre De Usuario: <input type="text" name="user" /></td></tr>
	<tr><td>Password: <input type="password" name="pass1" /></td><td>Confirme su Password: <input type="password" name="pass2" /></td></tr>
	<tr><td>Email: <input type="text" name="email1" /></td><td>Confirme su Email: <input type="text" 	name="email2" /></td></tr>
<tr><td><input type="submit" name="Submit2" value="Registrar"/></td><td class="blimpiar"><input name="" type="reset" value="Limpiar"/>
	</td></tr></table>

    <p><a href="index.php">volver atras</a></p>
</fieldset>

</form>
</body>
</html>
  #2 (permalink)  
Antiguo 20/08/2006, 23:08
 
Fecha de Ingreso: febrero-2006
Ubicación: Burzaco
Mensajes: 10
Antigüedad: 18 años, 2 meses
Puntos: 0
al boton de submit cambialo por:
<input type="button" value="Submit" onClick="validate();return false;">

donde validate() es una funcion javascript.. que valida tu formulario

function validate(){
if(...){
return false;
}
// si va todo bien subimos el form
document.registro.submit();
}

hay varias formas de hacerlo, proba con esta, si no vemos usando el evento onSubmit del form.
  #3 (permalink)  
Antiguo 21/08/2006, 02:02
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 5 meses
Puntos: 61
Lo que propone juancho, aunque muy común no es del todo correcto en cuanto a la limpieza del código. Una forma más adecuada es dejar todo como está y cambiar ligeramente la etiqueta form en este sentido:

<form name="registro" method="post" action="doreg.php" onsubmit="return valida_envia()">

Espero que te sirva!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #4 (permalink)  
Antiguo 21/08/2006, 04:54
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Hola:

Pues la forma correcta es la que pone KarlanKas (¡Hola ), además todas las sentencias return false del código de juancho20 no tienen ningún sentido... return false cancela el envío de formularios cuando está asociado al evento de envío (onsubmit del form) y cuando está asociado al click en los enlaces... si no hay una asignación de ese false a algo se puede (o mejor dicho se debería) omitir.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 21/08/2006, 16:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 22
Antigüedad: 17 años, 9 meses
Puntos: 0
gracias hice lo que me recomendo KarlanKas
funciono muy bien, gracias a todos
  #6 (permalink)  
Antiguo 22/08/2006, 01:33
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 5 meses
Puntos: 61
No hay por qué darlas! Cualquier cosa ya sabes dónde estamos!!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
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 05:22.