我需要通过id
而不是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;
}
这是一个回购 - http://jsfiddle.net/benfosterdev/emZB8/
您可以在控制台中看到,这显然是为两个字段设置了“必需”规则,即使它没有在第二个字段中指定。
如果您想直接使用validate plugin,最好删除对不显眼的插件的引用。
答案 0 :(得分:4)
如果输入没有唯一的名称属性,jQuery Validate将无效。
我浪费了~2个小时让这个工作。当我没有正确使用他们的插件时,为什么开发人员不会抛出错误?!
答案 1 :(得分:3)
您发布的代码无法按照您的要求执行操作。提供简明的工作演示,以示其他方式。
请参阅此演示,其中rule
仅适用于指定的元素。
<强>的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>
答案 2 :(得分:1)
我遇到了类似的问题,其中一个字段的验证将应用于所有其他字段。设置&#34; debug&#34;为了真实,jquery验证开始投掷&#34;&#39; field&#39;没有指定名称&#34;在控制台中。我在那些有问题的字段上设置了name属性,然后问题解决了。
所以我猜jquery验证并不像未命名的字段。