3

電子メールまたはモバイルを含めることができるフィールドが 1 つあります (私の場合、モバイルは 8 桁です)。私はすでに2つのアプローチを試しました(「要素」には検証メソッドがないため、両方の例は機能しません):

最初のアプローチ: カスタム メソッドを作成し、そこで両方の検証を行いますが、独自の電子メールとモバイルの検証を作成する必要があります。新しいメソッドで jQuery 検証ルールを再利用する方法が見つかりませんでした。これは私がしたいことです:

jQuery.validator.addMethod("mobileoremail", function(value, element) {
        return this.optional(element) || 
               element.validate({ rules: { digits: true, rangelength: [8, 8] } }) || 
               element.validate({ rules: { email: true } });
    }, "Invalid mobile or email");

2 番目のアプローチ: 従属ルールを作成します。また、この場合、jQuery 検証ルールを再利用する方法が見つかりませんでした。

{ myRules: {
            rules: {
                user: {
                    required: true,
                    email: {
                        depends: function(element) {
                            return !element.validate({ rules: { mobile: true } });
                        }
                    },
                    mobile: {
                        depends: function (element) {
                            return !element.validate({ rules: { email: true } });
                        }
                    }
                }
            }
        }
    }
4

1 に答える 1

5

次の検証方法はどうですか...

$.validator.addMethod("xor", function(val, el, param) {
    var valid = false;

    // loop through sets of nested rules
    for(var i = 0; i < param.length; ++i) {
        var setResult = true;

        // loop through nested rules in the set
        for(var x in param[i]) {
            var result = $.validator.methods[x].call(this, val, el, param[i][x]);

            // If the input breaks one rule in a set we stop and move
            // to the next set...
            if(!result) {
                setResult = false;
                break;
            }
        }

        // If the value passes for one set we stop with a true result
        if(setResult == true) {
            valid = true;
            break;
        }
    }

    // Return the validation result
    return this.optional(el) || valid;
}, "The value entered is invalid");

次に、次のようにフォームの検証を設定できます...

$("form").validate({
  rules: {
    input: {
      xor: [{
        digits: true,
        rangelength: [8, 8]
      }, {
        email: true
      }]
    }
  },
  messages: {
    input: {
      xor: "Please enter a valid email or phone number"
    }
  }
});    

ここで実際に見てくださいhttp://jsfiddle.net/eJdBa/

于 2012-10-08T11:56:24.637 に答える