6

使用するたびrequire_from_groupに、他のすべての検証が無効になります。なぜ何かアイデアはありますか?

また、「Telefon」と「Mobitel」をグループ化して適用require_from_groupする方法はありますか?

  $(document).ready(function(){
    $("#fncMain").validate(
    {
    /*groups:{Call:"Telefon Mobitel"},*/
    rules:{
        Davcna:{required:true,exactlength:5, digits:true},
        Idzav:{required:true,exactlength:5, digits:true},
        Maticna:{required:true,exactlength:5, digits:true},
        Telefon:{require_from_group: [1,".callme"]},
        Mobitel:{require_from_group: [1,".callme"]}
    }, 
    messages:{

    }}
    );
  });

ここに含まれていない他のすべてのフィールドは、単純な「必須」クラスを使用します。require_from_group「Telefon」と「Mobitel」に適用されているルールを削除すると、他のすべてのフィールド検証が正常に機能します。

手伝ってくれてありがとう。

HTMLの編集:http: //cl.ly/29391q0Q3G231T2I380m (ここに投稿するには長すぎます)

4

2 に答える 2

5

@Tats_innitはrequire_from_groupここにカスタムを投稿しました:https ://stackoverflow.com/posts/13127475

require_from_group結局のところ、これにより、バージョン1.10.0のinforでリリースされたログに記録されたgithubのバグも修正されadditional-method-1.10.jsますjquery.validation

githubの問題: require_from_groupは他のルールを無効にします

smileyanp @ githubは、@ Tats_innitの関数を再利用し、それが正しく機能し、の前に定義された他のルールの検証を無効にしないことを示すテストを作成したソリューションでこの投稿を引用しました。require_from_group

この投稿は、このような小さな詳細のために3時間のグーグルを燃やしたので、時間の節約としてここにあります。

修理:

ロードadditional-method-1.10.js後にこのコードを更新または実行するだけです(関数を上書きするため)。additional-method-1.10.js

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
  var numberRequired = options[0];
  var selector = options[1];
  var fields = $(selector, element.form);
  var filled_fields = fields.filter(function() {
    // it's more clear to compare with empty string
    return $(this).val() != ""; 
  });
  var empty_fields = fields.not(filled_fields);
  // we will mark only first empty field as invalid
  if (filled_fields.length < numberRequired && empty_fields[0] == element) {
    return false;
  }
  return true;
// {0} below is the 0th item in the options field
}, jQuery.format("Please fill out at least {0} of these fields."));
于 2012-10-30T14:33:13.147 に答える
3

編集:実際には、この修正がバージョン 1.12.0 に組み込まれているように見えます。CDN ポインターは、http://jqueryvalidation.org/ で見つけることができます

そして参考までに:

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.min.js
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.js
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.min.js

上記の解決策を見つける前に、以下のコードを見つけたので、以下のコードを JS ファイルに貼り付けるのではなく、上記の CDN リンクを使用することをお勧めします。

現在、GitHub でより適切な修正が行われています(一番下までスクロールしてください)。これをここにコピーしました。 これは私の作品ではなく、これを書いた GitHub ユーザー sfreytag は SO の貢献者ではないようです。これを見つけた他の人が GitHub のスレッドを掘り下げる必要がないように、SO に入れたかっただけです。

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
    var validator = this;
    var selector = options[1];
    var validOrNot = $(selector, element.form).filter(function() {
        return validator.elementValue(this);
    }).length >= options[0];

    if(!$(element).data('being_validated')) {
        var fields = $(selector, element.form);
        fields.data('being_validated', true);
        fields.valid();
        $(element.form).valid();
        fields.data('being_validated', false);
    }
    return validOrNot;
}, jQuery.format("Please fill at least {0} of these fields."));

これまでのところ、これで限定的なテストを行ってきましたが、期待どおりに機能しているように見え、すべての検証が行われるので (以前のように「require_from_group」以外の検証を吹き飛ばす代わりに)、これまでのところ満足しています。JS コードの先頭にあるバリデーター宣言の後に追加しました。

$.validator.setDefaults({
    debug: true,
    success: "valid"
});

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
    var validator = this;
    var selector = options[1];
   //continuation of code...
于 2014-05-19T17:38:48.047 に答える