Foros del Web » Programando para Internet » Javascript »

Agregar evento onsubmit dinámicamente

Estas en el tema de Agregar evento onsubmit dinámicamente en el foro de Javascript en Foros del Web. Holas a todos, tengo una duda cual es la forma correcta de agregar el evento onsubmit a un <form> dinamicamente o sea un equivalente a ...
  #1 (permalink)  
Antiguo 04/05/2011, 08:50
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Agregar evento onsubmit dinámicamente

Holas a todos, tengo una duda cual es la forma correcta de agregar el evento onsubmit a un <form> dinamicamente o sea un equivalente a onsubmit="return verifica(this)", de la forma q a continuación la hago no me funciona correctamente

Html:

Cita:
<form action="prueba.php" method="post" id="loginForm">
...
</form>
Este es mi código JS

Código Javascript:
Ver original
  1. window.onload = function() {
  2.     addEvent("submit", "loginForm", function() {return verifica(this)})
  3. }
  4.  
  5. function verifica (form) {
  6.     with(form) {
  7.         if(usuario.value == "") {
  8.             alert("Llene el campo usuario");
  9.             return false;
  10.         }
  11.         if (password.value == "") {
  12.             alert("Llene el campo password");
  13.             return false;
  14.         }
  15.     }
  16.     return true;
  17. }
  18.  
  19. function addEvent(event, elem, func) {
  20.     elem = document.getElementById(elem)
  21.     if (elem.addEventListener) {  // W3C DOM
  22.         elem.addEventListener(event,func,false)
  23.         return true
  24.     } else
  25.         if (elem.attachEvent) // IE DOM
  26.             return elem.attachEvent("on"+event, func)
  27.         else {
  28.             throw 'No es posible añadir evento'
  29.             return false
  30.         }
  31. }

Gracias, espero sugerencias
Saludos!
  #2 (permalink)  
Antiguo 04/05/2011, 10:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Agregar evento onsubmit dinámicamente

buenas,
el evento se registra correctamente. tu problema debe ser la inhabilidad de poder detener el envio cuando los datos no validan bien. esto por la forma en que se registro el evento, addEventListener. cuando se usa la funcion estandar para registrar eventos, la forma de cancelar el evento es un tanto distinto. en lugar de devolver un boolean false debes invocar la funcion preventDefault desde el objeto event que captura el handler. no obstante, en iexplorer -por tener un modelo distinto- debes asignar un boolean a la propiedad returnValue del objeto event.

en fin, dentro de la funcion anonima que has registrado como handler debes escribir arguments[0].preventDefault() -modelo DOM- y arguments[0].returnValue = false -modelo iexplorer-.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 04/05/2011, 11:08
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Agregar evento onsubmit dinámicamente

Muchas gracias hice el siguiente cambio y funciona, espero te hayas referido a esto, talvez hay una mejor manera, me hiciste recuerdo a event.preventDefault(); de jquery

Cita:
addEvent("submit", "loginForm", function() {if(!verificaLogin(this))arguments[0].preventDefault();arguments[0].returnValue=false;})
Saludos!
  #4 (permalink)  
Antiguo 04/05/2011, 11:53
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Agregar evento onsubmit dinámicamente

esta mal. fijate que en el codigo no estas considerando si el navegador es compatible con el modelo DOM o si se trata de iexplorer. en esa porcion estas diciendo algo como si verificaLogin no valido exitosamente, invoca preventDefault. de lo contrario asigna false a returnValue. en realidad lo que debes hacer es si verficaLogin no valida con exitosamente, invocar preventDefault y asignar false a returnValue. de lo contrario, hacer nada. ahora bien, en el proceso de invocar ambas lineas debes tener cuidado puesto que si intentas invocar preventDefault en iexplorer -supongo que desde la version 9 ya funciona-, este te genera error y se detiene la ejecuccion. debes invocar la funcion dentro de una clausula try/catch.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 04/05/2011, 14:14
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Agregar evento onsubmit dinámicamente

Si tienes razón, bueno esta vez lo modifique de ésta manera, ahora si esta correcto

Código Javascript:
Ver original
  1. addEvent("submit", "loginForm",
  2.         function() {
  3.             if(!verificaLogin("loginForm")) {
  4.                 try {
  5.                     arguments[0].preventDefault()
  6.                 } catch (e){
  7.                     arguments[0].returnValue=false
  8.                 }
  9.             }
  10.         })

Código Javascript:
Ver original
  1. function verificaLogin (form) {
  2.     with(document.getElementById(form)) {
  3.         if(usuario.value == "") {
  4.             alert("Llene el campo usuario");
  5.             return false;
  6.         }
  7.         if (password.value == "") {
  8.             alert("Llene el campo password");
  9.             return false;
  10.         }
  11.     }
  12.     return true;
  13. }

tube q cambiar en la parte donde enviaba el elemento con this y llamar directamente al formulario por su id, ya q en ie no funcionaba, gracias por las correcciones.

Saludos!

Última edición por omarMusic; 04/05/2011 a las 15:40

Etiquetas: evento
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 16:57.