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

时间:2010-10-11 07:50:50

标签: javascript jquery jquery-plugins

我正在尝试使用Jquery Validate插件,我能够弄清楚如何在静态字段中使用它。

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

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

希望有人能借此给我一个帮助。感谢

2 个答案:

答案 0 :(得分:1)

首先 - 在写作时在你的代码中添加注释。

错误在这里:

 var arrElements = $(".machineID");

arrElements始终为空,没有machineID

的元素

你的每一个都不起作用。我重构了它http://jsfiddle.net/PaTJ4/

您的代码可能会使用更多修复程序,对于该任务来说有点过于复杂。但现在它有效。

祝你好运

答案 1 :(得分:0)

我的版本有所改进 - 当检测到重复时,任何一个重复字段都应标记为无效,并且应该能够更改以解决问题。因此,您需要每次都重新验证所有其他字段(使用validator.element()),但要避免递归(使用validator.validatingOthers)。

为了完整性,我会在这里发布checkMachineIDs的代码:

    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;
        }
    }