2012-03-27 14 views
3

Ich habe ein einfaches Formular und möchte eine benutzerdefinierte jQuery Validierungsregel hinzufügen. Ich möchte, dass das Textfeld (Bonuscode) nur eine Handvoll möglicher Werte enthält. Ich nehme an, ich brauche eine Reihe dieser Werte, aber ich weiß nicht viel Javascript, ich weiß nicht, wo ich hier falsch liege.jQuery Validierung mit Werten im Array

jQuery.validator.addMethod("equals", function(value, element, param) { 
    return this.optional(element) || value == param; 
}, jQuery.format("")); 

$(document).ready(function(){ 
    $("#form").validate({ 
     debug: false, 
     rules: { 
      bonuscode: {equals: ["code1", "code2"]} 
     }, 
     messages: { 
      bonuscode: "That's not a Bonus Code!", 
     }, 
    }); 
}); 

Antwort

1

Haben Sie den Bonus-Wert in der Javascript-Array ist keine gute Lösung. Sie können die Ajax-Anfrage an den Server stellen und den Bonuswert prüfen. Hier ist der Beispielcode.

Sie die Remote-Option bei der Validierung Plugin können Sie die bounus

$("#form").validate({ 
    debug: false, 
    rules: { 
    bonuscode: { 
     required: true, 
     remote: { 
     url: "check-bonus.php", 
     type: "post", 
     data: { 
      bonuscode: function() { 
      return $("#bonuscode").val(); 
      } 
     } 
     } 
    } 
    } 
}); 
+0

Warum ist es schlechte Praxis die Werte in der Javascript enthalten? Kannst du mir zeigen, wie check-bonus.php aussehen müsste? Vielen Dank für Ihre Hilfe! – dsol828

+0

Hab es jetzt. Meine endgültige Lösung wurde im OP für die Referenz von anderen veröffentlicht. Vielen Dank. – dsol828

+1

@ dsol828: Es ist eine schlechte Übung, weil der Benutzer Ihrer Website einfach "Quelle anzeigen" und die Bonuscodes sehen kann. –

1

Angenommen, dies ist eigentlich Ihr Anwendungsfall prüfen, ist @jems wahrscheinlich richtig zu sagen, sollten Sie diese Art der Sache nicht in Anspruch serverseitige Code. Allerdings ist Ihre benutzerdefinierte Regel nicht weit weg:

jQuery.validator.addMethod("equals", function(value, element, param) { 
    return this.optional(element) || $.inArray(value, param) >= 0; // <-- Check if the value is in the array. 
}, jQuery.format("")); 

$(document).ready(function() { 
    $("#form").validate({ 
     debug: false, 
     rules: { 
      bonuscode: { 
       equals: ["code1", "code2"] 
      } 
     }, 
     messages: { 
      bonuscode: "That's not a Bonus Code!", 
     }, 
    }); 
}); 

Beispiel:http://jsfiddle.net/AApJx/

+0

'$ .inArray (Wert, Parameter)> 0 'sollte' $ .inArray (Wert, Parameter)> -1' Siehe https://api.jquery.com/jQuery.inArray/ –

+0

@MaffooClock: Danke für die Korrektur, aktualisiert –

Verwandte Themen