Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态表单上的Jquery自定义验证插件AddMethod_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

Javascript 动态表单上的Jquery自定义验证插件AddMethod

Javascript 动态表单上的Jquery自定义验证插件AddMethod,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在尝试使用jqueryvalidate插件,并且我能够弄清楚如何在静态字段上使用它 我的问题是如何在我的动态表单上使用它。我编造了一把小提琴来讨论我的问题。希望你能有耐心阅读这篇文章。小提琴的链接是 现在,我想做的是,验证在每个文本框中输入的机器ID,并确保它是唯一的。假设您输入ABCD-123两次,系统应提醒您该值不是唯一的 希望有人能帮我一把。首先,感谢您在编写代码时在代码中添加注释 错误在这里: var arrElements = $(".machineID"); arrEleme

我正在尝试使用jqueryvalidate插件,并且我能够弄清楚如何在静态字段上使用它

我的问题是如何在我的动态表单上使用它。我编造了一把小提琴来讨论我的问题。希望你能有耐心阅读这篇文章。小提琴的链接是

现在,我想做的是,验证在每个文本框中输入的机器ID,并确保它是唯一的。假设您输入ABCD-123两次,系统应提醒您该值不是唯一的


希望有人能帮我一把。首先,感谢您在编写代码时在代码中添加注释

错误在这里:

 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我想这是验证插件的一部分。它会检查字段是否设置为可选,这样就不会验证可选字段。我想你不需要这个。但我从未使用过验证插件