欧芹js中清除相关字段错误

时间:2016-06-27 15:48:54

标签: javascript jquery parsley.js

我正在编写一个自定义欧芹验证器,用于检查一组字段的唯一性。一切都很好,除了当我修复一个独特的错误时,我没有改变的字段仍然存在错误。这当然是因为manageFailingFieldTrigger仅为已更改的字段添加onchange。我想如果我能弄明白如何告诉manageFailingFieldTrigger验证一个组而不是一个可以修复我的问题的字段onchange,但我无法弄清楚如何做到这一点。

window.Parsley.addValidator('unique', function (value, requirement) {
        console.debug("Validating: " + value + "\nrequirement: " + requirement);
        console.debug($(requirement + '[value="' + value + '"]'));
        var matches = 0;
        $(requirement).each(function(i, val) {
          if ($(this).val() == value) {
            matches++;
          }
        });
        if(matches > 1) return false;
        return true;
    })
        .addMessage('en', 'unique', 'This value must be unique');

HTML(删除了大量无关的内容):

<form id="upload_form" method="POST" action="/school/student/upload_finish" data-parsley-validate>
            <input type="text" name="data-0-1" class="column-1" value="student2@ehrtutor.com" data-parsley-group="column-1" data-parsley-unique=".column-1"/>
            <input type="text" name="data-1-1" class="column-1" value="student3@ehrtutor.com" data-parsley-group="column-1" data-parsley-unique=".column-1"/>
            <input type="text" name="data-2-1" class="column-1" value="student7@ehrtutor.com" data-parsley-group="column-1" data-parsley-unique=".column-1"/>
            <input type="text" name="data-3-1" class="column-1" value="student1@ehrtutor.com" data-parsley-group="column-1" data-parsley-unique=".column-1"/>
            <input type="text" name="data-4-1" class="column-1" value="student4@ehrtutor.com" data-parsley-group="column-1" data-parsley-unique=".column-1"/>
            <input type="text" name="data-5-1" class="column-1" value="student2@ehrtutor.com" data-parsley-group="column-1" data-parsley-unique=".column-1"/>
            <input type="text" name="data-6-1" class="column-1" value="student3@ehrtutor.com" data-parsley-group="column-1" data-parsley-unique=".column-1"/>
</form>

2 个答案:

答案 0 :(得分:0)

Parsley(还)还没有很好地处理相互依赖的领域。处理IMO的最简单方法是将inputs括在div中,并将验证添加到div(请参阅this example)。验证可以添加/删除&#34;重复&#34;重复类。

否则,您可以触发'input'事件,或在您要更新的其他字段上致电validate()

答案 1 :(得分:0)

这似乎达到了我的目的:

window.Parsley.addValidator('unique', function (value, requirement) {
    var matches = 0;
    $(requirement).each(function(i, val) {
      if ($(this).val() == value) {
        matches++;
      }
    });
    if(matches > 1) return false;
    return true;
})
    .addMessage('en', 'unique', 'This value must be unique');

window.Parsley.on('field:success', function() {
    // In here, `this` is the parlsey instance of #some-input
    //Ugly hack
    if("unique" in this.constraintsByName)
    {
        for(var field in this.parent.fields)
        {
            var fieldInstance = this.parent.fields[field];
            if(fieldInstance.$element.hasClass(this.constraintsByName["unique"].requirements.substring(1)) && fieldInstance.$element.hasClass('parsley-error'))
            {
                fieldInstance.validate();
            }
        }
    }
});