Foros del Web » Programando para Internet » Javascript »

Opinion validación javascript

Estas en el tema de Opinion validación javascript en el foro de Javascript en Foros del Web. Hola, He hecho sin ayuda mi primer script de validation gracias a ayudas de foros. Supongo que habrá mejores de maneras de hacerlo sin poner ...
  #1 (permalink)  
Antiguo 09/03/2014, 05:33
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Opinion validación javascript

Hola,
He hecho sin ayuda mi primer script de validation gracias a ayudas de foros.
Supongo que habrá mejores de maneras de hacerlo sin poner divs en el formulario, pero me gusta como es mio y lo veo sencillo.
Solo comprueba que no esta vacio, y que solo son numeros en uno de los campos.
El formulario es muy largo por eso uso onfocus para que salté adonde esta el fallo.
Que debo de usar para que el mensaje en innerhtml y el focus se elimine cuando escriben en los campos?
quizas algo como onchange y innerhtml = ''?
Intenté poner solo una vez la clase css pero como son diferentes ids no pude.
Buento esto es el código, como lo veis? Alguna sugerencia?

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function OnSubmitBooking()
  3. {
  4.  
  5. if(document.Booking.name.value == '')
  6. {
  7. divresult = document.getElementById('namebox')
  8. divresult.className = 'validation'
  9. divresult.innerHTML = 'Please fill in name';
  10. document.Booking.name.focus();
  11. return false;
  12. }
  13. if(document.Booking.passport.value == '')
  14. {
  15. divresult = document.getElementById('passportbox')
  16. divresult.className = 'validation'
  17. divresult.innerHTML = 'Please fill in your identification';
  18. document.Booking.passport.focus();
  19. return false;
  20. }
  21. if(document.Booking.emailtrue.value == '')
  22. {
  23. divresult = document.getElementById('emailtruebox');
  24. divresult.className = 'validation'
  25. divresult.innerHTML = 'Please fill in email';
  26. document.Booking.emailtrue.focus();
  27. return false;
  28. }
  29. if(document.Booking.repeat_email.value == '')
  30. {
  31. divresult = document.getElementById('repeat_emailbox');
  32. divresult.className = 'validation'
  33. divresult.innerHTML = 'Please repeat email';
  34. document.Booking.repeat_email.focus();
  35. return false;
  36. }
  37. if(document.Booking.telmobile.value == '')
  38. {
  39. divresult = document.getElementById('telmobilebox');
  40. divresult.className = 'validation'
  41. divresult.innerHTML = 'Please fill in mobile to bring on holiday';
  42. document.Booking.telmobile.focus();
  43. return false;
  44. }
  45. if(document.Booking.emailtrue.value != document.Booking.repeat_email.value)
  46. {
  47. divresult = document.getElementById('repeat_emailbox');
  48. divresult.className = 'validation'
  49. divresult.innerHTML = 'Email and repeat email are not equal';
  50. return false;
  51. }
  52. if(document.Booking.test.value =='')
  53. {
  54. divresult = document.getElementById('resultbooking');
  55. divresult.className = 'validation'
  56. divresult.innerHTML = 'Please answer the security question';
  57. document.Booking.test.focus();
  58. return false;
  59. }
  60. if (isNaN(document.Booking.test.value))
  61. {
  62. divresult.className = 'validation'
  63. divresult.innerHTML = 'The answer is invalid, use only numbers in security question';
  64. document.Booking.test.focus();
  65. return false;
  66. }
  67.  
  68. else{
  69. divresult.style.color="blue";
  70. divresult.innerHTML = 'Please Wait...';}
  71. }
  72. </script>
  #2 (permalink)  
Antiguo 09/03/2014, 06:39
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Opinion validación javascript

He intentado anidar la funcion de onchange dentro de la otra funcion pero no funciona
Código HTML:
Ver original
  1. <input id="name" name="name" title="Please enter your name" onchange="quitarfocus()" type="text" size="50">
  2. <div id="namebox"></div>

Código Javascript:
Ver original
  1. function OnSubmitBooking()
  2. {
  3.  
  4. if(document.Booking.name.value == '')
  5.  {
  6. divresult = document.getElementById('namebox')
  7. divresult.className = 'validation'
  8. divresult.innerHTML = 'Please fill in name';
  9. document.Booking.name.focus();
  10.         return false;
  11.         function quitarfocus()
  12.         {
  13.     divresult.innerHTML.style.display = "none"}
  14.  }
  #3 (permalink)  
Antiguo 09/03/2014, 06:59
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Opinion validación javascript

Todo este código sigue la misma estructura:
Código Javascript:
Ver original
  1. // name - namebox
  2.     if(document.Booking.name.value == '')
  3.     {
  4.         divresult = document.getElementById('namebox')
  5.         divresult.className = 'validation'
  6.         divresult.innerHTML = 'Please fill in name';
  7.         document.Booking.name.focus();
  8.         return false;
  9.     }
  10.     // passport - passportbox
  11.     if(document.Booking.passport.value == '')
  12.     {
  13.         divresult = document.getElementById('passportbox')
  14.         divresult.className = 'validation'
  15.         divresult.innerHTML = 'Please fill in your identification';
  16.         document.Booking.passport.focus();
  17.         return false;
  18.     }
  19.     // emailtrue - emailtruebox
  20.     if(document.Booking.emailtrue.value == '')
  21.     {
  22.         divresult = document.getElementById('emailtruebox');
  23.         divresult.className = 'validation'
  24.         divresult.innerHTML = 'Please fill in email';
  25.         document.Booking.emailtrue.focus();
  26.         return false;
  27.     }
  28.     // repeat_email - repeat_emailbox
  29.     if(document.Booking.repeat_email.value == '')
  30.     {
  31.        divresult = document.getElementById('repeat_emailbox');
  32.        divresult.className = 'validation'
  33.        divresult.innerHTML = 'Please repeat email';
  34.        document.Booking.repeat_email.focus();
  35.        return false;
  36.     }
  37.     // telmobile - telmobilebox
  38.     if(document.Booking.telmobile.value == '')
  39.     {
  40.        divresult = document.getElementById('telmobilebox');
  41.        divresult.className = 'validation'
  42.        divresult.innerHTML = 'Please fill in mobile to bring on holiday';
  43.        document.Booking.telmobile.focus();
  44.        return false;
  45.     }
  46.     // test - resultbooking
  47.     if(document.Booking.test.value =='')
  48.     {
  49.         divresult = document.getElementById('resultbooking');
  50.         divresult.className = 'validation'
  51.         divresult.innerHTML = 'Please answer the security question';
  52.         document.Booking.test.focus();
  53.         return false;
  54.     }
Intenta usar bucles cuando te ocurra esto para no escribir tanto. A la vez que luego al cambiar el código HTML te será más rápido cambiar el código javascript:
Código Javascript:
Ver original
  1. var inputs = {
  2.         name        : "namebox",
  3.         passport    : "passportbox",
  4.         emailtrue   : "emailtruebox",
  5.         repeat_email: "repeat_emailbox",
  6.         telmobile   : "telmobilebox",
  7.         test        : "resultbooking"
  8.     }
  9.     for( key in inputs ) {
  10.         if(document.Booking[key].value == '')
  11.         {
  12.             divresult = document.getElementById(inputs[key])
  13.             divresult.className = 'validation'
  14.             divresult.innerHTML = 'Please fill in name';
  15.             document.Booking[key].focus();
  16.             return false;
  17.         }
  18.     }

Por otro lado, ¿return false es para evitar el submit pot defecto? Lo digo porque "return false" está en desuso. Deberías usar el método "preventDefault". Encontrarás información sobre este en tu buscador favorito.

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils
  #4 (permalink)  
Antiguo 09/03/2014, 07:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Opinion validación javascript

Cita:
Iniciado por Pantaláimon Ver Mensaje
Intenta usar bucles cuando te ocurra esto para no escribir tanto. A la vez que luego al cambiar el código HTML te será más rápido cambiar el código javascript:
Código Javascript:
Ver original
  1. var inputs = {
  2.         name        : "namebox",
  3.         passport    : "passportbox",
  4.         emailtrue   : "emailtruebox",
  5.         repeat_email: "repeat_emailbox",
  6.         telmobile   : "telmobilebox",
  7.         test        : "resultbooking"
  8.     }
  9.     for( key in inputs ) {
  10.         if(document.Booking[key].value == '')
  11.         {
  12.             divresult = document.getElementById(inputs[key])
  13.             divresult.className = 'validation'
  14.             divresult.innerHTML = 'Please fill in name';
  15.             document.Booking[key].focus();
  16.             return false;
  17.         }
  18.     }

Por otro lado, ¿return false es para evitar el submit pot defecto? Lo digo porque "return false" está en desuso. Deberías usar el método "preventDefault". Encontrarás información sobre este en tu buscador favorito.

Un saludo!
Gracias
Estuve intentar usar solo divresult pero no puedo,
probaré eso, pero los innerhtml cambian en cada input pero en el bucle no, mi imagino que tambien se podrá, pero eso es demasiado complicado para mi todaviá.
No sabia lo de preventDefault, pero no es eso jquery? Solo intento entender javascript y ajax normal sin frameworks:
http://www.w3schools.com/jquery/even...entdefault.asp
  #5 (permalink)  
Antiguo 09/03/2014, 08:00
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Opinion validación javascript

Cierto, los innerHTML cambian (que por cierto, si sólo quieres añadir texto usa mejor textContent ). Pero vaya, la idea es la misma, poner la información que cambia en un objeto o array y recorrer la estructura que se repite mediante un bucle:

Código Javascript:
Ver original
  1. var info = {
  2.         name        : ['namebox'        , 'Please fill in name' ],
  3.         passport    : ['passportbox'    , 'Please fill in your identification' ],
  4.         emailtrue   : ['emailtruebox'   , 'Please fill in email' ],
  5.         repeat_email: ['repeat_emailbox', 'Please repeat email' ],
  6.         telmobile   : ['telmobilebox'   , 'Please fill in mobile to bring on holiday' ],
  7.         test        : ['resultbooking'  , 'Please answer the security question' ]
  8.     }
  9.     for( key in inputs ) {
  10.         if(document.Booking[key].value == '')
  11.         {
  12.             divresult = document.getElementById(info[key][0])
  13.             divresult.className = 'validation'
  14.             divresult.textContent = info[key][1];
  15.             document.Booking[key].focus();
  16.             return false;
  17.         }
  18.     }

preventDefault es un método de javascript. Aquí dejo información;
http://www.w3.org/TR/2003/NOTE-DOM-L...t-binding.html
http://www.lewebmonster.com/funcion-...en-javascript/
https://developer.mozilla.org/es/doc...preventDefault

La idea básica es que el handler( función llamada cuando ocurre el evento) acepta un parámetro event y este puede llamar al método preventDefault para evitar el submit:

Código Javascript:
Ver original
  1. function OnSubmitBooking( event ) {
  2.     event.preventDefault();
  3.     if( error validacion ) {
  4.         // ...
  5.     } else { // si todo correcto
  6.         // hacer lo que sea
  7.         // ...
  8.         // hacer submit al formulario
  9.         this.submit();
  10.     }
  11. }

Aunque sin saber del HTML quizá esté dando palos de ciego.

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 09/03/2014 a las 08:07
  #6 (permalink)  
Antiguo 09/03/2014, 08:17
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Opinion validación javascript

Cita:
Iniciado por Pantaláimon Ver Mensaje
Cierto, los innerHTML cambian (que por cierto, si sólo quieres añadir texto usa mejor textContent ). Pero vaya, la idea es la misma, poner la información que cambia en un objeto o array y recorrer la estructura que se repite mediante un bucle:

Código Javascript:
Ver original
  1. var info = {
  2.         name        : ['namebox'        , 'Please fill in name' ],
  3.         passport    : ['passportbox'    , 'Please fill in your identification' ],
  4.         emailtrue   : ['emailtruebox'   , 'Please fill in email' ],
  5.         repeat_email: ['repeat_emailbox', 'Please repeat email' ],
  6.         telmobile   : ['telmobilebox'   , 'Please fill in mobile to bring on holiday' ],
  7.         test        : ['resultbooking'  , 'Please answer the security question' ]
  8.     }
  9.     for( key in inputs ) {
  10.         if(document.Booking[key].value == '')
  11.         {
  12.             divresult = document.getElementById(info[key][0])
  13.             divresult.className = 'validation'
  14.             divresult.textContent = info[key][1];
  15.             document.Booking[key].focus();
  16.             return false;
  17.         }
  18.     }

preventDefault es un método de javascript. Aquí dejo información;
http://www.w3.org/TR/2003/NOTE-DOM-L...t-binding.html
http://www.lewebmonster.com/funcion-...en-javascript/
https://developer.mozilla.org/es/doc...preventDefault

La idea básica es que el handler( función llamada cuando ocurre el evento) acepta un parámetro event y este puede llamar al método preventDefault para evitar el submit:

Código Javascript:
Ver original
  1. function OnSubmitBooking( event ) {
  2.     event.preventDefault();
  3.     if( error validacion ) {
  4.         // ...
  5.     } else { // si todo correcto
  6.         // hacer lo que sea
  7.         // ...
  8.         // hacer submit al formulario
  9.         this.submit();
  10.     }
  11. }

Aunque sin saber del HTML quizá esté dando palos de ciego.

Un saludo!
Gracias, a la tarde lo pruebo,
en un tonto intento intenté esto por si acaso...
pero no iba lol
divresult.innerHTML = 'Please fill in name','Please','Please2','Please3','Please4','Plea se5';

si sé html, css, php y mysql, pero los arrays es mi lado debil, será porque soy autodidacta, tan solo uso php mas bien para sacar datos de la base de datos y me acabo de iniciar en javascript y ajax, antes lo usaba pero solo modificaba, hacerlo tu ya es otra cosa.
Gracias de nuevo
  #7 (permalink)  
Antiguo 09/03/2014, 08:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Opinion validación javascript

Cita:
Iniciado por Pantaláimon Ver Mensaje

Código Javascript:
Ver original
  1. function OnSubmitBooking( event ) {
  2.     event.preventDefault();
  3.     if( error validacion ) {
  4.         // ...
  5.     } else { // si todo correcto
  6.         // hacer lo que sea
  7.         // ...
  8.         // hacer submit al formulario
  9.         this.submit();
  10.     }
  11. }

Aunque sin saber del HTML quizá esté dando palos de ciego.
Lo otro lo miro dentro de unas horas pero lo de preventDefault para mi es lo mismo que tengo, tan solo debo de añadir de cambiar return false por preventDefault() y añadir esto ( event ) {
event.preventDefault(); + this.submit();
????'
esto es lo que tenia resumido:
Código Javascript:
Ver original
  1. <script type="text/javascript">          
  2.     function OnSubmitBooking()
  3. {
  4.  
  5. if(document.Booking.name.value == '')
  6.  {
  7. divresult = document.getElementById('namebox')
  8. divresult.className = 'validation'
  9. divresult.innerHTML = 'Please fill in name';
  10. document.Booking.name.focus();
  11.         return false;
  12.  }
  13.   if(document.Booking.passport.value == '')
  14. etc.....
  15.  else{
  16.      divresult.style.color="blue";
  17.      divresult.innerHTML = 'Please Wait...';}
  18. }
  19.     </script>
  #8 (permalink)  
Antiguo 09/03/2014, 09:54
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Opinion validación javascript

La idea es que event.preventDefault() se pone al inicio de la función para evitar la acción por defecto que haría el evento submit. Luego si los inputs son correctos haces el submit mediante this.submit();

Pero ya te he dicho que sin el código HTML no puedo asegurar que funcione. Pero tiene toda la pinta de que estés mezclando código HTML con javascript. Aquí tienes un tutorial de iniciación con eventos: http://librosweb.es/javascript/capitulo_6.html que te explica como separar el contenido( código HTML) de la parte interactiva (código Javascript ).

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils
  #9 (permalink)  
Antiguo 09/03/2014, 10:09
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Opinion validación javascript

Hola:

No estoy nada de acuerdo con esto:

Cita:
Iniciado por Pantaláimon Ver Mensaje
La idea es que event.preventDefault() se pone al inicio de la función para evitar la acción por defecto que haría el evento submit. Luego si los inputs son correctos haces el submit mediante this.submit();
...
Particularmente suelo considerar también viejas versiones de explorer y junto con preventDefault(), cancelo con returnValue = false...

Pero sobre la cancelación del evento, siempre debe ser la última de las instrucciones, siempre que falle la validación... es más, las validaciones importantes siempre deben hacerse en el servidor.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 09/03/2014, 10:40
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Opinion validación javascript

Cita:
Iniciado por caricatos Ver Mensaje
Hola:
Pero sobre la cancelación del evento, siempre debe ser la última de las instrucciones, siempre que falle la validación... es más, las validaciones importantes siempre deben hacerse en el servidor.
De acuerdo, hace poco que estuve mirando sobre el tema por primera vez y supongo que se me quedó en el inconsciente algo que decían aquí:
http://qbit.com.mx/blog/2013/01/07/l...ion-en-jquery/
de poner el preventDefault al inicio y stopPropagation al final. Pero viendo otras webs veo que no hay necesidad. De todas maneras tampoco acabo de entender por qué debe ser la última de las instrucciones.

Código Javascript:
Ver original
  1. if( !Event.prototype.preventDefault ) {
  2.     Event.prototype.preventDefault = function() {
  3.         this.returnValue = false;
  4.     }
  5. }
¿Con esto funcionaría para versiones viejas de Explorer?

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils
  #11 (permalink)  
Antiguo 09/03/2014, 12:31
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Opinion validación javascript

Cita:
Iniciado por Pantaláimon Ver Mensaje
Cierto, los innerHTML cambian (que por cierto, si sólo quieres añadir texto usa mejor textContent ). Pero vaya, la idea es la misma, poner la información que cambia en un objeto o array y recorrer la estructura que se repite mediante un bucle:

Gracias, habia una pequeña errata y añadiendo otra validacion en este orden funciona:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     function OnSubmitBooking()
  3. {
  4.     if(document.Booking.emailtrue.value != document.Booking.repeat_email.value)
  5.  {
  6. divresult = document.getElementById('repeat_emailbox');
  7. divresult.className = 'validation'
  8. divresult.innerHTML = 'Email and repeat email are not equal';
  9.  document.Booking.repeat_email.focus();
  10.         return false;
  11.  }
  12.         var info = {
  13.             name        : ['namebox'        , 'Please fill in name' ],
  14.             passport    : ['passportbox'    , 'Please fill in your identification' ],
  15.             emailtrue   : ['emailtruebox'   , 'Please fill in email' ],
  16.             repeat_email: ['repeat_emailbox', 'Please repeat email' ],
  17.             telmobile   : ['telmobilebox'   , 'Please fill in mobile to bring on holiday' ],
  18.             test        : ['resultbooking'  , 'Please answer the security question' ]
  19.         }
  20.         for( key in info ) {
  21.             if(document.Booking[key].value == '')
  22.             {
  23.                 divresult = document.getElementById(info[key][0])
  24.                 divresult.className = 'validation'
  25.                 divresult.textContent = info[key][1];
  26.                 document.Booking[key].focus();
  27.                 return false;
  28.             }
  29.         }
  30. }
  31.         </script>
La validación de la pregunta de seguridad, creo que le meteré Ajax ya que estoy y queda mejor.
Lo de Preventdeafult lo dejo un rato ya que veo que se ha abierto un debate paralelo.
Antes de este nuevo codigo usaba innerhtml y estaba intentando poner que cuando escribe en el input que esta en focus que se elimine el texto de validación, no es necesario pero queda bien, intentaba meter otra funcion dentro de la funcion usando onchange y poner innerhtml como display none:
document.getElementById("resultado").style.display = "none";
me imagino en este caso sería textContent.display = "none";

Este es el html relevante:
Código HTML:
Ver original
  1. <form class="instant" name="Booking" id="solicitud"
  2. action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="post" onSubmit="return OnSubmitBooking();">
  3. <label for="name">Name:</label><input id="name" name="name" title="Please enter your name" onchange="quitarfocus()" type="text" size="50">
  4. <div id="namebox"></div>

Edited, I changed textcontent to innerhtml as innerhtml is supported by all browswers and works, does not have any html:
divresult.innerHTML = info[key][1];
http://www.davidtong.me/innerhtml-in...html-and-text/

Última edición por helenp; 09/03/2014 a las 12:58
  #12 (permalink)  
Antiguo 09/03/2014, 14:16
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Opinion validación javascript

Cita:
Iniciado por helenp
Antes de este nuevo codigo usaba innerhtml y estaba intentando poner que cuando escribe en el input que esta en focus que se elimine el texto de validación, no es necesario pero queda bien, intentaba meter otra funcion dentro de la funcion usando onchange y poner innerhtml como display none:
document.getElementById("resultado").style.display = "none";
me imagino en este caso sería textContent.display = "none";
Supongo que lo que estas buscando que se produzca un cambio cuando quites el foco. En este caso existe el evento onblur:
http://jsfiddle.net/jefebrondem/q7tqU/
He quitado algunos atributos del formulario para enfocarme en lo esencial. Ya los volveras a poner. Como verás, a mi me gusta quitar los atributos de evento (onsubmit, onchange) del código HTML, dejando toda la gestión de eventos en el código Javascript.

Sobre textContent, cierto. Para IE <= 8 no funcionaría, lo desconocía. Aunque el comentario que dejé sobre sustituir innerHTML por textContent era para coger una buena pràctica en temas de seguridad. Pues en caso de que añadas a innerHTML el valor de un input, puede que te entren un script. En caso contrario, ahora mismo no se me ocurre ninguna razón para usarlo. Pero vaya, en temas de validación, hay que considerar que javascript para lo que sirve es para que un usuario medio no sobrecargue el servidor con peticiones erróneas. La validación anti-cabroncetes hay que hacerla siempre en el servidor.

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils
  #13 (permalink)  
Antiguo 10/03/2014, 07:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Opinion validación javascript

Cita:
Iniciado por Pantaláimon Ver Mensaje
Supongo que lo que estas buscando que se produzca un cambio cuando quites el foco. En este caso existe el evento onblur:
http://jsfiddle.net/jefebrondem/q7tqU/
Gracias,
Aunque no sé si me convence el onblur, me gusta el onsubmit, lo estudiaré,
tenía en mente algo como onchange, o si valida innerhtml = display.none o ''.

Estoy metiendo la validación del captcha con javascript y no se como devovler true.
He intentado esto y tambien de dar el mensaje de error en el archivo php y solo devuelve false.
Esto es el ajax:
Código Javascript:
Ver original
  1. function objetoAjax(){
  2.     var xmlhttp=false;
  3.     try {
  4.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  5.     } catch (e) {
  6.  
  7.     try {
  8.         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  9.     } catch (E) {
  10.         xmlhttp = false;
  11.     }
  12. }
  13.  
  14. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  15.       xmlhttp = new XMLHttpRequest();
  16.     }
  17.     return xmlhttp;
  18. }
  19.  
  20. //Función para recoger los datos del formulario y enviarlos por post  
  21. function OnSubmitBooking()
  22. {
  23.     if(document.Booking.emailtrue.value != document.Booking.repeat_email.value)
  24.  {
  25. divresult = document.getElementById('repeat_emailbox');
  26. divresult.className = 'validation'
  27. divresult.innerHTML = 'Email and repeat email are not equal';
  28.  document.Booking.repeat_email.focus();
  29.         return false;
  30.  }
  31.         var info = {
  32.             names        : ['namebox'        , 'Please fill in name' ],
  33.             passport    : ['passportbox'    , 'Please fill in your identification' ],
  34.             emailtrue   : ['emailtruebox'   , 'Please fill in email' ],
  35.             repeat_email: ['repeat_emailbox', 'Please repeat email' ],
  36.             telmobile   : ['telmobilebox'   , 'Please fill in mobile to bring on holiday' ],
  37.             test        : ['resultbooking'  , 'Please answer the security question' ]
  38.         }
  39.         for( key in info ) {
  40.             if(document.Booking[key].value == '')
  41.             {
  42.                 divresult = document.getElementById(info[key][0])
  43.                 divresult.className = 'validation'
  44.                 divresult.innerHTML = info[key][1];
  45.                 document.Booking[key].focus();
  46.                 return false;
  47.             }
  48.         }
  49.         divresult = document.getElementById('resultbooking');
  50.   //recogemos los valores de los inputs
  51.  
  52. enviar = document.solicitud.enviar.value;
  53.   question = document.solicitud.question.value;
  54.   answer = document.solicitud.answer.value;
  55.   test = document.solicitud.test.value;
  56.   var ajaxcaptcha = objetoAjax();
  57.   ajaxcaptcha.open("POST", "/pasarela/captchaajax.php", true);
  58.   ajaxcaptcha.onreadystatechange = function () {   
  59.  if (ajaxcaptcha.readyState == 4) {
  60.       if (ajaxcaptcha.responseText === "ok") {
  61. return true;
  62.       } else {
  63.         divresult.innerHTML = "The answer to the security question was not correct"
  64.       <!--  LimpiarCampos();-->
  65.       }
  66.     }
  67. }
  68.  
  69.   ajaxcaptcha.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  70.   ajaxcaptcha.send("test=" + test + "&enviar=" + enviar + "&answer=" + answer +
  71.        "&question=" + question + "");
  72.         return false;
  73. }

Etiquetas: formulario, html
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 07:07.