2010-08-26 10 views

Respuesta

109

Se puede usar un método personalizado, algo como esto:

jQuery.validator.addMethod("notEqual", function(value, element, param) { 
    return this.optional(element) || value != param; 
}, "Please specify a different (non-default) value"); 

Entonces utilizar de esta manera:

$("form").validate({ 
    rules: { 
    nameField: { notEqual: "Your Name" } 
    } 
}); 

Añadiendo que, por regla general como esto hace que sea más extensible, por lo que puede Úselo para comparar con el valor predeterminado en otros campos.

+0

cualquier posibilidad de lo que es sensible a las mayúsculas? – compguy24

+0

@ compguy24 Eso sería 'return this.optional (element) || value.toLowerCase()! = param.toLowerCase(); 'en el' addMethod' – Isaiah

+0

¡Gracias por la explicación! ¡Nunca entendí cómo funcionó hasta hoy! ¡Aclamaciones! – Matias

0

Si tiene un solo valor en el que desea que no sea como su pregunta lo implica, puede compararlo fácilmente sin ningún complemento externo.

$('#yourForm').submit(function(e) { 
    if ($('input[name="yourField"]').val()=='Your Name') 
     e.preventDefault(); 
     alert("Your message here"); 
    } 
}); 
1

No estoy seguro si tienes tu respuesta, pero:

retorno this.optional (elemento) || valor ! = param;

no funcionará si el valor es variable.

ser necesario para leer:

this.optional retorno (elemento) || valor ! = $ (param) .val();

Saludos

30

respuesta de Nick encaja a la perfección. Necesitaba comparar dos campos en el formulario y asegurarme de que no fueran iguales. Lo modifiqué solo un poco.

jQuery.validator.addMethod("notEqual", function(value, element, param) { 
return this.optional(element) || value != $(param).val(); 
}, "This has to be different..."); 

$("#cform").validate(
{ 
    rules: { 
     referringsales: { required: false, notEqual: "#salesperson" } 
    } 
}); 

Editado para responder a un comentario:

Si usted tiene más de una serie de menús desplegables para comparar, el método también funciona con ese caso.

jQuery.validator.addMethod("notEqual", function(value, element, param) { 
return this.optional(element) || value != $(param).val(); 
}, "This has to be different..."); 

$("#cform").validate(
{ 
    rules: { 
     referringsales: { required: false, notEqual: "#salesperson" } 
     DropDown2: { required: false, notEqual: "#SecondBase" } 
    } 
}); 

Si la pregunta se refiere a la comparación de referringsales contra 2 bases diferentes (digamos #initialContact y #salesperson), entonces simplemente añadir que la regla de la lista.

referringsales: { required: false, notEqual: "#salesperson", notEqual: "#initialContact" } 
+0

Comentario de Sam: "@Frank Luke: ¿y si tengo 2 listas desplegables diferentes?" –

+0

@PeterO., El segundo menú desplegable tendría su propia regla. De esta manera: secondDropDown: {required: false, notEqual: "#secondBase"} La segunda base puede ser la primera o una diferente. El método notEqual verifica el referido. ¿O quiere decir que tiene que comparar un valor con 2 menús desplegables diferentes? –

+1

Ese no es mi comentario. Simplemente lo agregué aquí porque su autor lo escribió como una respuesta en lugar de un comentario. Por ese motivo, debe modificar esta respuesta para responder al comentario. –

8

propongo una función de múltiples valores ...

jQuery.validator.addMethod("notEqualTo", 
function(value, element, param) { 
    var notEqual = true; 
    value = $.trim(value); 
    for (i = 0; i < param.length; i++) { 
     if (value == $.trim($(param[i]).val())) { notEqual = false; } 
    } 
    return this.optional(element) || notEqual; 
}, 
"Please enter a diferent value." 
); 

Y lo llamo ...

$("#abm-form").validate({ 
debug: true, 
rules: { 
    password1: { 
     required: true, 
     minlength: 10, 
     notEqualTo: ['#lastname', '#firstname', '#email'] 
    }, 
    password2: { 
     equalTo: '#password1' 
    } 
} 
}); 

Esto funciona para mí!

+0

Esto también funciona para mí ... – rahul

0

Muchas gracias, Nick!Una pequeña adición: si tiene unos campos para validar en función de validación(), la sintaxis debe ser:

self.logo.rules(
    'add', { 
     notEqual: "Select the Logo" 
    } 
); 
0

Gracias por la respuesta de s @ Nick Craver ♦, pero en mi entorno de trabajo, que tiene que ser ligeramente modificado antes de que pudiera funcionar.

$.validator.addMethod("notEqualTo", function(value, element, param) { 
     return this.optional(element) || value != $(param).val(); 
}, 'This two elements are the same, please change it.'); 
Cuestiones relacionadas