清除欧芹js中的依赖字段错误
Clear Dependent field error in 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>
欧芹(还)不能很好地处理相互依赖的领域。 IMO 处理它的最简单方法是将您的 inputs
包含在 div
中并将验证添加到 div
(参见 this example)。验证可以 add/remove a "duplicate" class 重复。
否则,您可以触发 'input'
事件,或在您要更新的其他字段上调用 validate()
。
这似乎完成了我想要的:
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();
}
}
}
});
我正在编写一个自定义欧芹验证程序,用于检查一组字段的唯一性。一切都很好,除了当我修复一个独特的错误时,我没有更改的字段仍然是错误的。这当然是因为 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>
欧芹(还)不能很好地处理相互依赖的领域。 IMO 处理它的最简单方法是将您的 inputs
包含在 div
中并将验证添加到 div
(参见 this example)。验证可以 add/remove a "duplicate" class 重复。
否则,您可以触发 'input'
事件,或在您要更新的其他字段上调用 validate()
。
这似乎完成了我想要的:
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();
}
}
}
});