Foros del Web » Programando para Internet » Javascript » Frameworks JS »

validacion con javascript

Estas en el tema de validacion con javascript en el foro de Frameworks JS en Foros del Web. Hola, tengo un script de validación ajax, con mootools, funciona muy bien, pero tengo un formulario muy largo, y cuando no se rellena un campo ...
  #1 (permalink)  
Antiguo 17/01/2014, 04:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
validacion con javascript

Hola, tengo un script de validación ajax, con mootools,
funciona muy bien, pero tengo un formulario muy largo, y cuando no se rellena un campo obligatorio sale un texto en rojo al lado diciendo que lo rellene.
Pero como el formulario es muy largo entonces al darle clic a enviar en el boton, pues si esta arriba no se ve la advertencia y parece solo que no funciona enviar el formulario.
Quizas con javascript normal hay alguna forma de añadir que salte al que falta por rellenar?

se llama al javascript mediante clases que son class="required" y class="required email" y tienen un title que es el texto que aparece al lado de la casilla

con este script al final se ejecuta:
<script type="text/javascript">

window.addEvent('domready', function(){
var myFormValidation = new Validate('myForm',{
errorClass: 'red'
});
});
</script>

Teneis alguna idea, podría poner los datos necesarios abajo del todo, pero de verdad no queda muy bien.
Gracias
  #2 (permalink)  
Antiguo 17/01/2014, 06:06
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: validacion con javascript

Esta es la parte editable del script
Código Javascript:
Ver original
  1. var Validate = new Class({ 
  2.     getOptions: function(){
  3.         return {
  4.             validateOnBlur: true,
  5.             errorClass: 'error',
  6.             errorMsgClass: 'errorMessage',
  7.             dateFormat: 'dd/MM/yy',
  8.             onFail: Class.empty,
  9.             onSuccess: false,
  10.             showErrorsInline: true,
  11.             label: 'Please wait...'};},
  12.     initialize: function(form, options){
  13.         this.setOptions(this.getOptions(), options);       
  14.         this.form = $(form);
  15.         this.elements = this.form.getElements('.required');
  16.         this.list = [];    
  17.         this.elements.each(function(el,i){
  18.             if(this.options.validateOnBlur){
  19.                 el.addEvent('blur', this.validate.bind(this, el));          }
  20.         }.bind(this));     
  21.         this.form.addEvent('submit', function(e){
  22.             var event = new Event(e);
  23.             var doSubmit = true;
  24.             this.elements.each(function(el,i){
  25.                 if(! this.validate(el)){
  26.                     event.stop();
  27.                     doSubmit = false
  28.                     this.list.include(el);
  29.                 }else{
  30.                     this.list.remove(el);               }
  31.             }.bind(this));         
  32.             if(doSubmit){
  33.                 if(this.options.onSuccess){
  34.                     event.stop();
  35.                     this.options.onSuccess(this.form);
  36.                 }else{
  37.                     this.form.getElement('input[type=submit]').setProperty('value',this.options.label);             }
  38.             }else{
  39.                 this.options.onFail(this.getList());            }          
  40.         }.bind(this));          }, 
  41.     getList: function(){
  42.         var list = new Element('ul');
  43.         this.list.each(function(el,i){
  44.             if(el.title != ''){
  45.             var li = new Element('li').injectInside(list);
  46.             new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li);          }
  47.         });
  48.         return list;    }, 
  49.     validate: function(el){
  50.         var valid = true;
  51.         this.clearMsg(el);     
  52.         switch(el.type){
  53.             case 'text':
  54.             case 'textarea':
  55.             case 'select-one':
  56.                 if(el.value != ''){
  57.                     if(el.hasClass('email')){
  58.                         var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
  59.                         if(el.value.toUpperCase().match(regEmail)){
  60.                             valid = true;
  61.                         }else{
  62.                             valid = false;
  63.                             this.setMsg(el, 'Please enter a valid email address');                      }                   }                  
  64.                     if(el.hasClass('number')){
  65.                         var regNum = /[-+]?[0-9]*\.?[0-9]+/;
  66.                         if(el.value.match(regNum)){
  67.                             valid = true;
  68.                         }else{
  69.                             valid = false;
  70.                             this.setMsg(el, 'Please enter a valid number');                     }                   }                  
  71.                     if(el.hasClass('postcode')){
  72.                         var regPC = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/
  73.                         if(el.value.match(regPC)){
  74.                             valid = true;
  75.                         }else{
  76.                             valid = false;
  77.                             this.setMsg(el, 'Please enter a valid postcode');                   }                   }                  
  78.                     if(el.hasClass('date')){
  79.                         var d = Date.parseExact(el.value, this.options.dateFormat);
  80.                         if(d != null){
  81.                             valid = true;
  82.                         }else{
  83.                             valid = false;
  84.     this.setMsg(el, 'Please enter a valid date in the format: '+this.options.dateFormat.toLowerCase());         }               }              
  85.                 }else{
  86.                     valid = false;
  87.                     this.setMsg(el);}
  88.                 break;             
  89.             case 'checkbox':
  90.                 if(!el.checked){
  91.                     valid = false;
  92.                     this.setMsg(el);
  93.                 }else{
  94.                     valid = true;               }
  95.                 break;             
  96.             case 'radio':
  97.                 var rad = $A(this.form[el.name]);
  98.                 var ok = false;
  99.                 rad.each(function(e,i){
  100.                     if(e.checked){
  101.                         ok = true;              }           });
  102.                 if(!ok){
  103.                     valid = false;
  104.                     this.setMsg(rad.getLast(), 'Please select an option');
  105.                 }else{
  106.                     valid = true;
  107.                     this.clearMsg(rad.getLast());               }
  108.                 break;                      }
  109.         return valid;   }, 
  110.     setMsg: function(el, msg){
  111.         if(msg == undefined){
  112.             msg = el.title;     }
  113.         if(this.options.showErrorsInline){
  114.             if(el.error == undefined){
  115.                 el.error = new Element('span').addClass(this.options.errorMsgClass).setText(msg).injectAfter(el);
  116.             }else{
  117.                 el.error.setText(msg);          }
  118.             el.addClass(this.options.errorClass);   }   }, 
  119.     clearMsg: function(el){
  120.         el.removeClass(this.options.errorClass);
  121.         if(el.error != undefined){
  122.             el.error.remove();
  123.             el.error = undefined;       }   }});
  124. Validate.implement(new Options);
  125. Validate.implement(new Events);
  #3 (permalink)  
Antiguo 17/01/2014, 08:39
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: validacion con javascript

Prueba dándole el enfoque al elemento cuando se lance el mensaje de error:

Código Javascript:
Ver original
  1. this.focus();

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 17/01/2014, 09:04
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: validacion con javascript

Cita:
Iniciado por Alexis88 Ver Mensaje
Prueba dándole el enfoque al elemento cuando se lance el mensaje de error:

Código Javascript:
Ver original
  1. this.focus();

Saludos
gracias,
una pistita mas por favor, que solo sé editar javascript.
Me imagino que debo de hacer una función aqui.
initialize: function(form, options){
this.setOptions(this.getOptions(), options);
this.form = $(form);
this.elements = this.form.getElements('.required');
this.list = [];
this.elements.each(function(el,i){
if(this.options.validateOnBlur){
el.addEvent('blur', this.validate.bind(this, el)); }
}.bind(this));

existe salto en javascript?
gracias
  #5 (permalink)  
Antiguo 17/01/2014, 09:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: validacion con javascript

¿A qué te refieres con "salto"?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 17/01/2014, 09:14
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: validacion con javascript

¿Salto de línea?

Cita:
"\n"
  #7 (permalink)  
Antiguo 17/01/2014, 09:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: validacion con javascript

¿O este?

Código HTML:
Ver original
  1. <br />

¿O quizá este?

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 17/01/2014, 11:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: validacion con javascript

puf, lo siento, me refería a saltar al error.
He estado probando y aún no he conseguido nada.
supongo que vendrá alqo como si da a submit y da falso que da focus al input que esta mal, pero no doy ni una.
  #9 (permalink)  
Antiguo 17/01/2014, 11:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: validacion con javascript

Cita:
Iniciado por Alexis88 Ver Mensaje
¿O este?

Código HTML:
Ver original
  1. <br />

¿O quizá este?

No hay que reirse del inculto :(
  #10 (permalink)  
Antiguo 17/01/2014, 12:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: validacion con javascript

Cuando te decía que le des el enfoque al elemento que no aprueba la validación, me refería a que hagas un this.focus() en donde corresponda, por ejemplo, veo esto en el código que mostraste inicialmente:

Código Javascript:
Ver original
  1. if(el.value.toUpperCase().match(regEmail)){
  2.     valid = true;
  3. }else{
  4.     valid = false;
  5.     this.setMsg(el, 'Please enter a valid email address');                      
  6. }

Después del mensaje de advertencia, podría ir el this.focus().

Cita:
Iniciado por helenp Ver Mensaje
No hay que reírse del inculto :(
Disculpa si te ofendí, quería agregarle una cuota de humor a la publicación.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 17/01/2014, 13:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: validacion con javascript

Gracias, he probado con el focus en absolutamente todos los sitios y no cambia nada
A jugar!:
y resulta que se quedaba en cache.

Y ahora me doy cuenta que alli no tiene que ser la validación, porque alli es donde se valida si no lo inserta correctamente.
Debe de ser donde verifica que el campo no está vacio
creo que es aqui:
Código Javascript:
Ver original
  1. getList: function(){
  2.         var list = new Element('ul');
  3.         this.list.each(function(el,i){
  4.             if(el.title != ''){
  5.             var li = new Element('li').injectInside(list);
  6.             new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li);          }
  7.         });
  8.         return list;    },

en esto esta el mensaje de error, el mensaje es el.title
Código Javascript:
Ver original
  1. new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li);

Última edición por helenp; 17/01/2014 a las 13:55
  #12 (permalink)  
Antiguo 17/01/2014, 14:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: validacion con javascript

He probado asi:
Código Javascript:
Ver original
  1. var list = new Element('ul');
  2.         this.list.each(function(el,i){
  3.             if(el.title != ''){
  4.             var li = new Element('li').injectInside(list);
  5.             new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li).this.focus;           }
  6.         });
y nada
asi tampoco
Código Javascript:
Ver original
  1. new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li).focus;

Etiquetas: ajax, formulario, funcion, javascript, validacion
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 21:40.