3

我需要通过idnot将验证规则分配给特定的输入元素name

为此,我正在执行以下代码:

   $("#cvc").rules("add", { required: true, validateCvc: true });
   $("#cardNumber").rules("add", 
     { creditcard: true, messages: { creditcard: "Invalid Card Number" } });

但是,这实际上是将规则分配给表单上的所有输入。我可以通过记录附加到不同输入的规则来验证这一点:

   console.log($("#name").rules());

输出:

Object {required: true, validateCvc: true, creditcard: true} 

更新

看起来这可能与 jQuery Validate Unobtrusive 插件有关,我开始发现它比它的价值更麻烦。设置验证的代码validate在我添加规则之前调用:

function validationInfo(form) {
    var $form = $(form),
        result = $form.data(data_validation),
        onResetProxy = $.proxy(onReset, form);

    if (!result) {
        result = {
            options: {  // options structure passed to jQuery Validate's validate() method
                errorClass: "input-validation-error",
                errorElement: "span",
                errorPlacement: $.proxy(onError, form),
                invalidHandler: $.proxy(onErrors, form),
                messages: {},
                rules: {},
                success: $.proxy(onSuccess, form)
            },
            attachValidation: function () {
                $form
                    .unbind("reset." + data_validation, onResetProxy)
                    .bind("reset." + data_validation, onResetProxy)
                    .validate(this.options);
            },
            validate: function () {  // a validation function that is called by unobtrusive Ajax
                $form.validate();
                return $form.valid();
            }
        };
        $form.data(data_validation, result);
    }

    return result;
}

更新 2

这是一个回购 - http://jsfiddle.net/benfosterdev/emZB8/

您可以在控制台中看到,这显然是为这两个字段设置了“必需”规则,即使它没有在第二个字段中指定。

如果您想直接使用验证插件,您最好删除对不显眼插件的引用。

4

3 回答 3

4

如果输入没有唯一的名称属性,jQuery Validate 将不起作用。

我浪费了大约 2 个小时来完成这项工作。当我没有正确使用他们的插件时,为什么开发人员不会抛出错误?!

于 2014-07-17T20:26:59.613 回答
3

您发布的代码无法满足您的要求。提供一个简洁的工作演示来展示。

请参阅此演示,其中rule仅适用于指定元素。

http://jsfiddle.net/tyCvL/

jQuery :

$(document).ready(function () {

    $('#myform').validate({  // initialize the plugin
        // options 
    });

    $("#field1").rules("add", { required: true });

});

HTML

<form id="myform">
    <input type="text" name="field1" id="field1"/>
    <input type="text" name="field2" id="field2"/>
</form>

编辑:

根据上面的示例,该name属性不是可选的。jQuery Validate 插件将始终要求在所有情况和案例name的所有元素上都存在一个属性。input

OP 的 jsFiddle 已修复:http: //jsfiddle.net/emZB8/5/

<form id="myform">
    <input type="text" name="field1" id="field1"/>
    <input type="text" name="field2" id="field2"/>
</form>
于 2013-02-19T17:10:56.283 回答
1

我有一个类似的问题,其中一个字段的验证将应用于所有其他字段。将“debug”设置为 true 后,jquery validate 开始在控制台中抛出“'field' has no name assigned”。我在那些有问题的字段上设置了 name 属性,瞧……问题解决了。

所以我猜 jquery validate 不喜欢未命名的字段。

于 2015-03-05T09:30:07.120 回答