Javascript 动态表单上的Jquery自定义验证插件AddMethod
我正在尝试使用jqueryvalidate插件,并且我能够弄清楚如何在静态字段上使用它 我的问题是如何在我的动态表单上使用它。我编造了一把小提琴来讨论我的问题。希望你能有耐心阅读这篇文章。小提琴的链接是 现在,我想做的是,验证在每个文本框中输入的机器ID,并确保它是唯一的。假设您输入ABCD-123两次,系统应提醒您该值不是唯一的Javascript 动态表单上的Jquery自定义验证插件AddMethod,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在尝试使用jqueryvalidate插件,并且我能够弄清楚如何在静态字段上使用它 我的问题是如何在我的动态表单上使用它。我编造了一把小提琴来讨论我的问题。希望你能有耐心阅读这篇文章。小提琴的链接是 现在,我想做的是,验证在每个文本框中输入的机器ID,并确保它是唯一的。假设您输入ABCD-123两次,系统应提醒您该值不是唯一的 希望有人能帮我一把。首先,感谢您在编写代码时在代码中添加注释 错误在这里: var arrElements = $(".machineID"); arrEleme
希望有人能帮我一把。首先,感谢您在编写代码时在代码中添加注释 错误在这里:
var arrElements = $(".machineID");
arrElements
始终为空,没有具有machineID
类的元素
你的每一个都不起作用。我重构了它
您的代码可能需要更多的修复,这对于该任务来说有点太复杂了。但现在它起作用了
祝您好运我改进了您的版本-当检测到重复时,任何一个重复的字段都应标记为无效,并且应该能够更改以解决问题。因此,您需要每次重新验证所有其他字段(使用
validator.element()
),但要避免递归(使用validator.validatingOthers
)
为了完整起见,我将在此处发布CheckMachineID的代码:
function checkMachineIDs(element){
if($(element).val() != ""){
var arrElements = $("#machineList .machineID");
var $element = $(element);
var validator = $($element[0].form).validate();
if(arrElements.length > 1){
var valid = true;
arrElements.not('#'+$element.attr('id')).each(function() {
var current = $(this);
if (current.val() == $element.val())
valid = false;
});
if (!validator.validatingOthers) {
validator.validatingOthers = true;
arrElements.not('#'+$element.attr('id')).each(function() {
validator.element(this);
});
if (valid) validator.element($element);
validator.validatingOthers = false;
}
return valid;
}else{
return true;
}
}else{
return true;
}
}
在jsfiddle中供参考如果您将JS代码放在javascript标记框中,这也很好。[现在查看]首先,您似乎缺少输入中的
machineID
类。然后,您应该检查表单中的输入-您的循环包括隐藏的模板。我现在面临的唯一问题是,当您修复另一个副本(不是一开始导致验证的副本)时,脚本没有重新验证。很快更新。非常好的帖子。。对不起,我只是键入了所有内容,所以我忘记了放置注释。尽管我仍然有一个查询,但在我看到的每个addmethod上,我总是看到这一行this.optional(元素)。那条线是什么意思?我只是认为它总是必需的,所以才添加了它。@Mark我想这是验证插件的一部分。它会检查字段是否设置为可选,这样就不会验证可选字段。我想你不需要这个。但我从未使用过验证插件