05-06-2018 0 条评论

在我们实际的应用开发中,可能会涉及到jquery validate验证表单的使用,同时对多个相同name的表单验证,如下图所示:
QQ截图20180605195230
这是一个很典型的例子,我们需要保证每个表单都是相同name,这时候如果使用传统的做法,只会验证第一个表单,显然这是我们所不愿意看到的结果,我们想要实现的如下图所示。
QQ截图20180605195520
解决的方法就是在你的JS里面写上:

$(function () {  
if ($.validator) {  
    $.validator.prototype.elements = function () {  
        var validator = this,  
            rulesCache = {};  
        return $([]).add(this.currentForm.elements)  
        .filter(":input")  
        .not(":submit, :reset, :image, [disabled]")  
        .not(this.settings.ignore)  
        .filter(function () {  
            var elementIdentification = this.id || this.name;  
            !elementIdentification && validator.settings.debug && window.console && console.error("%o has no id nor name assigned", this);  
            if (elementIdentification in rulesCache || !validator.objectLength($(this).rules()))  
                return false;  
            rulesCache[elementIdentification] = true;  
            return true;  
        });  
    };  
}  
});

以上的代码就是当name的值相同的时候,就会用id来区分,现在我们需要保证每个表单(input)的id值是不同的,简单的做法就是表单+序号来处理。

{for start="0" end="5"}
  <input name="name[]" id="name_{$i}" />
{/for}