2010-08-26 9 views

risposta

109

Si potrebbe utilizzare un metodo personalizzato, qualcosa di simile:

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

Quindi utilizzare in questo modo:

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

aggiunta come una regola come questa rende più estensibile, in modo da poter usarlo per confrontare con il valore predefinito in altri campi.

+0

alcuna possibilità di farcela case-insensitive? – compguy24

+0

@ compguy24 Sarebbe 'return this.optional (elemento) || value.toLowerCase()! = param.toLowerCase(); 'nel' addMethod' – Isaiah

+0

Grazie per la spiegazione! Non ho mai capito come funzionava fino ad oggi! Saluti! – Matias

0

Se si ha solo un valore in cui si desidera che non assomigli alla domanda, è possibile verificarlo piuttosto facilmente senza plug-in esterni.

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

Non è sicuro se hai la tua risposta, ma:

ritorno this.optional (elemento) || valore ! = param;

non funziona se il valore è variabile.

ha bisogno di leggere:

this.optional ritorno (elemento) || valore ! = $ (param) .val();

Acclamazioni

30

risposta di Nick si inserisce il disegno di legge. Avevo bisogno di confrontare due campi sul modulo e assicurarmi che non fossero uguali. L'ho modificato solo un po '.

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" } 
    } 
}); 

A cura di rispondere a un commento:

Se si dispone di più di una serie di menù a discesa per confrontare, il metodo funziona anche con questo 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" } 
    } 
}); 

Se la domanda è per quanto riguarda il confronto referringsales contro 2 basi diverse (dire #initialContact e #salesperson), poi semplicemente aggiungere che regola alla lista.

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

Commento di Sam: "@ Frank Luke: cosa succede se ho 2 dropdown diversi?" –

+0

@PeterO., La seconda discesa avrebbe una propria regola. In questo modo: secondDropDown: {required: false, notEqual: "#secondBase"} La seconda base può essere la prima o una diversa. Il metodo notEqual controlla quello a cui si fa riferimento. O vuoi dire che devi confrontare un valore con 2 diversi drop down? –

+1

Questo non è il mio commento. L'ho semplicemente aggiunto qui perché il suo autore lo ha scritto come risposta piuttosto che come commento. Per questo motivo è necessario modificare questa risposta per rispondere al commento. –

8

propongo una funzione multivalore ...

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." 
); 

E io lo chiamo ...

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

questo funziona per me!

+0

Questo funziona anche per me .. – rahul

0

Grazie mille, Nick !!!Un po 'di aggiungere: se si dispone di alcuni campi per convalidare in validate() funzione, la sintassi dovrebbe essere:

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

Grazie per la risposta @ Nick Craver ♦ s', ma nel mio ambiente di lavoro, ha bisogno di essere leggermente modificato prima che potesse funzionare.

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