Extender jQuery validator y mensajes de error personalizados
Hoy me he dado cuenta de algo que se me escapaba, el nombre de variable que contiene los mensajes errores personalizados debe ser exactamente igual que el método que extendemos.
Me explico:
Por cuestiones de proyecto, los select cuando no tienen un valor seleccionable correcto, tienen como atributo value “-1“. Esto hacía que a pesar que incluyésemos la clase ‘required’ en el elemento, como el objeto validator comprueba si el valor es distinto de blanco para situarlo como correcto, no nos validaba correctamente.
Ante esto la solución era extender la clase validator creando un nuevo método al que llamamos requiredselect y aplicárselo a los select.
jQuery.validator.addMethod("requiredselect",function(value,element){
var chk=false;
if(value!="-1"){chk=true};
return this.optional(element) || chk;
},jQuery.validator.messages.required);
Como véis, queremos que nuestro mensaje de error sea el de ‘required’. El problema viene cuando hemos definido -bien dentro del archivo de nuestro formulario, bien en un js aparte- esta variable required con un mensaje del tipo ‘Este campo es obligatorio’. El objeto validator no nos toma este mensaje personalizado, sino que establece el que tenga definido por defecto (inglés).
Viendo además que si cambiabas la variable de error, utilizando la de otra validación extendida, nos devolvía un error que no había un mensaje definido caí en la cuenta entonces que la variable de mensaje debía ser exactamente igual que el nombre del método.
jQuery.validator.addMethod("requiredselect",function(value,element){
var chk=false;
if(value!="-1"){chk=true};
return this.optional(element) || chk;
},jQuery.validator.messages.requiredselect);
Y nuestro mensaje personalizado:
jQuery.extend(jQuery.validator.messages, {
required: "Este campo es obligatorio.",
requiredselect:"Este campo es obligatorio.",
...
});
Buen aporte, aunque si no necesitas que valga “-1″ la opción de selecciona se puede poner como “”.
Por cierto, estoy haciendo un formulario también con jQuery validator en el que pido el móvil y el teléfono pero con que introduzcan solo uno en principio valdría. Sabes si hay alguna manera rápido de hacerlo o tengo que devanarme los sesos.