Foros del Web » Programando para Internet » Javascript »

validar formulario

Estas en el tema de validar formulario en el foro de Javascript en Foros del Web. Estimad@s Compañer@s: Tengo un formulario normal con 3 botones, un grabar, un modificar y un eliminar. Como véis, todo bastante convencional. Cuando quiero grabar o ...
  #1 (permalink)  
Antiguo 15/10/2008, 10:11
 
Fecha de Ingreso: mayo-2004
Mensajes: 50
Antigüedad: 20 años
Puntos: 1
validar formulario

Estimad@s Compañer@s:

Tengo un formulario normal con 3 botones, un grabar, un modificar y un eliminar. Como véis, todo bastante convencional. Cuando quiero grabar o modificar, uso el evento onSubmit para que me ejecute una función javascript llamada "validar" que me valida que los campos obligatorios estén rellenos y que todos los campos sean correctos, pero cuando quiero borrar, necesito hacer otra validación diferente. Llegados a éste punto, hacémos resúmen:

- tengo un formulario con 3 botones.
- Necesito 2 funciones javascript para validar el formulario, una para cuando grabo y modifico y otra para cuando borro.
- el evento onSubmit sólo ejecuta una única función javascript.

Mi pregunta es: ¿Cómo hago para validar un mismo formulario con dos funciones javascript diferentes dependiendo del botón que se ha pulsado?, es decir:
si pulso el botón grabar o el botón modificar, necesito que en el onSubmit ejecute la función "validaGrabaModifica()", y si se pulsa el botón borrar necesito que el onSubmit ejecute la función "validaBorra()"
¿No se puede de alguna manera especificar ese valor del onSubmit desde el botón?

Una posible solución es averiguar de algún modo qué botón es el que se ha pulsado, llamar siempre a una misma función javascript genérica que se llame por ejemplo "validar" y ahí dentro hacer un switch que, dependiendo del botón que se ha pulsado, haga unas ciertas validaciones u otras. Pero ésto no consigo hacerlo.

Hay que tener en cuenta que no quiero pasar por un asp intermedio, por lo que la solución de ir a un fichero asp y preguntar ahí por el botón que se ha pulsado no me vale (y eso sé hacerlo).

¿a álguien se le ocurre alguna idea? quizás sea algo que no se puede hacer.
Si álguien pudiese ayudarme le estaría muy agradecido.
Gracias.
  #2 (permalink)  
Antiguo 15/10/2008, 10:44
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: validar formulario

Hola, se me ocurre que la función que ejecutes en el onSubmit sea general y dentro de ella verifiques que opción se ha escogido, y hagas la verificación pertinente.

Otra sería usar el onclick de cada botón para la validación, en lugar del onSubmit del form

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 15/10/2008, 11:01
 
Fecha de Ingreso: mayo-2004
Mensajes: 50
Antigüedad: 20 años
Puntos: 1
Respuesta: validar formulario

Cita:
Iniciado por Casiopea3_14 Ver Mensaje
Una posible solución es averiguar de algún modo qué botón es el que se ha pulsado, llamar siempre a una misma función javascript genérica que se llame por ejemplo "validar" y ahí dentro hacer un switch que, dependiendo del botón que se ha pulsado, haga unas ciertas validaciones u otras. Pero ésto no consigo hacerlo.
Hola!!. Muchísimas gracias por responder !!

Como puedes ver, esa posibilidad ya la había pensado. No me parece una mala idea, pero ¿Sabes cómo saber cuál es el botón que se ha pulsado?
  #4 (permalink)  
Antiguo 15/10/2008, 11:06
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: validar formulario

uhmm podrias enviar a la función un parametro entero que sea 1, 2 o 3 dependiendo del botón que se selecciono.
Por ahora se me ocurre eso :P

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #5 (permalink)  
Antiguo 15/10/2008, 11:19
 
Fecha de Ingreso: mayo-2004
Mensajes: 50
Antigüedad: 20 años
Puntos: 1
Respuesta: validar formulario

Pero eso no puedo hacerlo. Te lo explico mejor con el código:

Mira, tengo éstos 3 botones

<input type="submit" value="Graba Paciente" name="btn_aceptar" id="btn_aceptar" onClick="frmPersonaAdd.action='./control/pacienteInsertaControl.asp'">

<input type="submit" value="Modifica Paciente" name="btn_modificar" id="btn_modificar" onClick="frmPersonaAdd.action='./control/pacienteModificaControl.asp'">

<input type="submit" value="Elimina Paciente" name="btn_eliminar" id="btn_eliminar" onClick="frmPersonaAdd.action='./control/pacienteEliminaControl.asp'">

Y cuando hago click en ellos, se ejecuta el onSubmit del formulario, que llama a la función donde se validan los campos. Ese on Submit está aquí:

<form id="frmPersonaAdd" name="frmPersonaAdd" method="POST" onSubmit="return validar(this);">

¿Cómo hago para que, dependiendo del botón pulsado yo le pueda pasar como parámetro a validar un 1, un 2 o un 3?

Muchas gracias por ayudarme!!!!
  #6 (permalink)  
Antiguo 15/10/2008, 12:12
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: validar formulario

Podrias llamar a la función que llamas en el onSubmit, enviandole los números antes mencionados, hacer la validación dependiendo del número que enviaste y luego agregar el action. Espero te funcione.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #7 (permalink)  
Antiguo 16/10/2008, 04:58
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: validar formulario

Creo que The_Web_Saint se refiere a:

Código html:
Ver original
  1. <input type="submit" value="Graba Paciente" name="btn_aceptar" id="btn_aceptar" onClick=" javascript:return validar(1,this.form); javascript:frmPersonaAdd.action='./control/pacienteModificaControl.asp';">
  2.  
  3. <input type="submit" value="Modifica Paciente" name="btn_modificar" id="btn_modificar" onClick=" javascript:return validar(2,this.form); javascript:frmPersonaAdd.action='./control/pacienteModificaControl.asp';">
  4.  
  5. <input type="submit" value="Elimina Paciente" name="btn_eliminar" id="btn_eliminar" onClick=" javascript:return validar(3,this.form); javascript:frmPersonaAdd.action='./control/pacienteModificaControl.asp';">

Saludos,..
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #8 (permalink)  
Antiguo 16/10/2008, 05:09
 
Fecha de Ingreso: mayo-2004
Mensajes: 50
Antigüedad: 20 años
Puntos: 1
Respuesta: validar formulario

Muchas gracias por vuestras aportaciones.
Sí, me he basado en lo que me ha propuesto The_Web_Saint
La verdad es que no sé si lo que tú has aportado funciona matak. Algo parecido intenté hacer yo ayer y no me funcionó. También intenté poner dos instrucciones javascript, pero no me funcionó.
Lo que he hecho ha sido ésto:

<input type="submit" value="Graba Paciente" name="btn_aceptar" id="btn_aceptar" onClick="return validar('insertar');">
<input type="submit" value="Modifica Paciente" name="btn_modificar" id="btn_modificar" onClick="return validar('modificar');">
<input type="submit" value="Elimina Paciente" name="btn_eliminar" id="btn_eliminar" onClick="return validar('eliminar');">

y validar recibe esos parámetros "insertar", "modificar" y "eliminar" y mi función javascript es la siguiente:


//función que valida el formulario
function validar(boton)
{
//Se devuelve una variable a true o false dependiendo de si se ha validado o no. Ésto se hace para que no se recargue la página si no se valida gracias a que
//ponemos un return en el onClick, de tal manera que si el onClick recibe false, no se hace el onClick y no se recarga la página.
var validado = true;
//según sea el botón que se ha pulsado
switch (boton)
{
// Si se ha pulsado eliminar
case "eliminar":
//no hay nada que validar, establecemos el action del formulario para que se dirija al controlador de la eliminación y ejecutamos el submit
document.frmPersonaAdd.action="./control/pacienteEliminaControl.asp";
document.frmPersonaAdd.submit();
break;
// si se ha pulsado insertar o modificar, entonces hay que validar que como mínimo tenga el nombre y el primer apellido del paciente
default:
// si el primer nombre no está relleno
if (document.frmPersonaAdd.nombre1.value == "")
{
// se muestra el mensaje de advertencia
alert("Debe especificar el nombre del paciente");
// se pone la variable validado a false indicando que no se ha validado el formulario
validado = false;
}
else
// si el primer nombre sí está relleno pero el apellido no
if (document.frmPersonaAdd.ape1.value == "")
{
// se muestra el mensaje de advertencia
alert("Debe especificar el primer apellido del paciente");
// se pone la variable validado a false indicando que no se ha validado el formulario
validado = false;
}
//Si se consigue validar el formulario tenemos que preguntar por los dos posibles botones que se hayan pulsado
else
{
//Si se ha pulsado insertar
if (boton == "insertar")
{
//establecemos el action del formulario para que se dirija al controlador de la insercción
document.frmPersonaAdd.action="./control/pacienteInsertaControl.asp";
}
// si se ha pulsado modificar
else
//establecemos el action del formulario para que se dirija al controlador de la insercción
{
document.frmPersonaAdd.action="./control/pacienteModificaControl.asp";
}
// y ejecutamos el submit
document.frmPersonaAdd.submit();
}
break;
}
return validado;
}

Así pues, me he basado íntegramente en lo que dijo nuestro compañero The_Web_Saint y funciona perfectamente. Si bien no es la solución exacta que buscaba, pero es la única que he encontrado y es bastante buena, la verdad.
En definitiva, en la función validar hago las validaciones dependiendo del botón pulsado (que lo pasamos como parámetro) y una vez validado, establezco el valor del action y ejecuto el formulario con la instrucción formulario.submit();

Muchas gracias a todos por vuestra ayuda y enhorabuena por vuestros conocimientos.

Saludos.
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 14:13.