我有一个动态表单,该表单与knockout.js
绑定并由bootstrapValidator
验证。
有一个输入字段需要经过验证并且需要进行验证。取决于另一个控制的状态。
输入字段:
<textarea id="inputReason" name="inputReason" rows="3"
class="form-control col-lg-8"
data-bind="value: Reason" />
knockout-viewmodel的相关javascript部分:
self.SelectAbsenceType = function (absenceType) {
self.SelectedID(absenceType.ID);
if (self.SelectedAbsenceType().ReasonRequired) {
$('#formCreate').bootstrapValidator('addField', 'inputReason', {
validators: {
notEmpty: {
message: 'Please enter a reason'
}
}
});
} else {
$('#formCreate').bootstrapValidator('removeField', 'inputReason');
}
}
我遇到的问题是,removeField
实例bootstrapValidator
的调用似乎并未完全删除所有注册信息,因为updateStatus
中存在javascript异常bootstrapValidator
类的方法实际上根本不应该被调用,因为我之前删除了字段:
var that = this,
type = fields.attr('type'),
group = this.options.fields[field].group || this.options.group,
total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;
例外:无法获取属性&#39; group&#39;:对象的值为null或未定义
变量field
包含值&quot; inputReason&#39;。
所以我的问题就是这个(因为bootstrapValidators removeField
的文档并不完全清楚:如何删除动态添加的字段inputReason complete的验证?
(旁注:有人可以添加标签boostrapvalidator吗?)
答案 0 :(得分:6)
好的,经过一些挖掘后,似乎bootstrapValidator插件还不支持删除附加到输入字段的验证器,该输入字段不会在同一进程中被删除。因此,附加到触发验证的输入字段的事件不会取消注册。
临时解决方法是销毁bootstrapValidator实例,将表单的data-*
属性设置为null并重新初始化插件。此代码替换bootstrapValidator.removeField()
调用:
bootstrapValidator.destroy();
$('#formCreate').data('bootstrapValidator', null);
$('#formCreate').bootstrapValidator();
<强>更新强>
另一种更好的方法是使用bootstrapValidator的启用/禁用功能:
bootstrapValidator
.enableFieldValidators
(
'inputReason',
self.SelectedAbsenceType().ReasonRequired
);
(感谢@nghuuphuoc指出这一点)