2011-08-15 15 views
2

jQuery検証プラグインでフォームを検証しています(プラグインが必要です。プラグインが必要な他の機能があります)。次の文のいずれかに該当する場合、フォームが有効であると考えられるjQueryエレガントな条件付きロジックを検証する

phoneNumber firstName lastName city zip

:それは、次のフィールドがある

  • phoneNumberが有効であることを
  • firstNamelastNamecityは、すべての有効な
  • firstNamelastNamezipは私が(私もジップのための私自身を持っている)各フィールドを必要とし、他の検証メソッドを使用する方法を知っているすべての有効な

ありますが、私は把握しようとしています上記のロジックを実装するためのエレガントなソリューションです。カスタムメソッドまたは検証グループはこれを処理する最善の方法ですか?

答えて

2

エレガントな、私は

をrecommでしょう...見る人の目にありますあなたが持っている3つのケースを処理するカスタムバリデーターを作成します。

私はValidateが何をすることができるかを理解するためにしばらく時間を費やしました...私は私のフォームを検証するためにこれを考え出しました。サーブレットへの非同期呼び出しを使用してユーザー名の確認を行っていますが、あなたはこれで必要なものを置くことができます。

カスタムバリデータを作成することを示すスタックオーバーフローの別のポストが見つかりました... 私は特にこの行が好きですjQuery.validator.methods['date'].call(this,value,element)カスタムコード内に組み込まれたバリデータを使用できるようです。

これらjQuery Validate Plugin - How to create a simple custom rule?は私が検証についての学習に使用するリソースです: http://www.ferdychristant.com/blog//articles/DOMM-7LZJN7どのように本当に使用の検証を詳述//記事。 http://www.ferdychristant.com/blog//pages/jQuery%20validation%20code
http://randomactsofcoding.blogspot.com/2008/10/starting-with-jquery-how-to-write.html
http://docs.jquery.com/Plugins/Validation/Methods/required#dependency-expression

情報の驚くべき深さは、あなたがそれすべてをクリックしなきゃ...単にhttp://docs.jquery.com/Plugins/Validationでもあります!

以下では、javascriptをルールセクションに置くこともできます。

$(document).ready(function() { 

$("#EmailUserEditFormId").validate({ 

    debug: true, //this lets it hit firebug 
    onkeyup:false, //keep the traffic down for my async call 

    rules: { 

     username: { 
      required: (jQuery('input#username:disabled').length==1)?false:true, //example of JS in a rule 
      usernameCheck: (jQuery('input#username:disabled').length==1)?false:true //example of a JS rule with a custom validator 
     } 
    }, 

    messages: { 
     username: { 
      required: "Please enter a unique username.", 
      usernameCheck: "Username is already in use. Choose another." 
     } 
    } 

}); 

});

...これは私の簡単なカスタムバリデーターでした。

jQuery.validator.addMethod('usernameCheck', function(username) { 
var postURL = "CheckUsername"; 
$.ajax({ 
    cache: false, 
    async: false, 
    type: 'POST', 
    data: 'username=' + username, 
    datatype: 'xml', 
    url: postURL, 
    success: function(xml) { 
     unique = (jQuery(xml).find('unique').text() == "true") ? true : false; 
    } 
}); 
return unique; 

}、 '');

+0

あなたのアドバイスを受けて、私は自分のロジックを実装するために依存関係コールバックを使うことに決めました。すべてのリンクありがとう。 –

0
phoneNumberValid, firstNameValid, lastNameValid, cityValid, zipValid; 
if ((phoneNumberValid) || (firstNameValid && lastNameValid && (cityValid || zipValid)) { 
    //Form Is Valid 
} 

各変数は、各フィールドのチェック後に設定する必要があるブール値を表します。

このような複雑なチェックは、jQueryの検証プラグインだけでは実行できないと思います。あなたはワンライナーを好きで、読みやすさを気にしない場合は

+0

私はプラグインを使用する必要がある理由は、エラーメッセージと型検証のサポートです。私自身のソリューションをローリングすることは、必要な入力に対しては簡単ですが、プラグインを使用する必要があります。そのため、入力衛生とマスキングはそれに沿って機能します。 –

0
function formIsValid(){ 
    if(phoneNumberIsValid) { return true; } 
    if(firstNameIsValid && lastNameIsValid) { 
    return (cityIsValid || zipIsValid); 
    } 
    return false; 
} 

return (phoneNumberIsValid || (firstNameIsValid && lastNameIsValid && (cityIsValid || zipIsValid))); 

あなたがするために使用されている場合、このようなものは読みやすくでき、conditional pattern matchingのためのプラグインをお持ちの場合それ

return match([phoneNumberValid, firstNameValid, lastNameValid, cityValid, zipValid], 
[true, _], true, 
[_, true, true, true, _], true, 
[_, true, true, _, true], true, 
_, false); 
関連する問題