2012-03-27 13 views
3

私は単純なフォームを持ち、カスタムjQuery検証ルールを追加したいと考えています。私は、テキストフィールド(ボーナスコード)に可能な限りの値しか持たないことを望みます。私はそれらの値の配列が必要だと思うが、多くのjavascriptを知らないので、私はここで間違っているのか分からない。配列内の値を使用したjQuery検証

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

答えて

1

javascript配列にボーナス値を持つことは良い解決策ではありません。サーバーにajaxリクエストを行い、ボーナス値を確認することができます。ここにサンプルコードがあります。

あなたは、これは実際にあなたのユースケースであると仮定すると、bounusをチェックするために、検証プラグインで

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

なぜそれがJavaScriptで値を含めるのは悪い習慣ですか? check-bonus.phpの外観を教えてもらえますか? ご協力いただきありがとうございます! – dsol828

+0

今すぐ入手します。私の最終的な解決策は、他の参考のためにOPに掲載されています。ありがとう。 – dsol828

+1

@ dsol828:あなたのサイトのユーザーが単に「ソースを見る」ことができ、ボーナスコードを見ることができるので、悪い習慣です。 –

1

をリモートオプションを使用することができ、@jemsは、サーバー側でこの種のものを確認してくださいと言ってではおそらく正しいですコード。ただし、カスタムルールは遠くではありません。

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

例:http://jsfiddle.net/AApJx/

+0

'$ .inArray(value、param)> 0'は' $ .inArray(value、param)> -1'となります。 https://api.jquery.com/jQuery.inArray/ –

+0

を参照してください。訂正、更新 –

関連する問題