我有一个与knockout.js
绑定(bind)并由bootstrapValidator
验证的动态表单。
有一个输入字段需要根据另一控件的状态进行“必需验证”。
输入字段:
<textarea id="inputReason" name="inputReason" rows="3"
class="form-control col-lg-8"
data-bind="value: Reason" />
knockout View 模型的相关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
的调用似乎并没有完全删除所有注册信息,因为ojit_code类的updateStatus
方法中存在一个javascript异常,实际上我根本不应该调用该异常之前删除的字段:var that = this,
type = fields.attr('type'),
group = this.options.fields[field].group || this.options.group,
total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;
异常:无法获取属性“group”的值:对象为null或未定义
变量
bootstrapValidator
包含值“inputReason”。所以我的问题是这个(因为bootstrapValidators
field
的文档尚不完全清楚:如何完全删除字段inputReason的动态添加的验证?(旁注:有人可以添加标记boostrapvalidator吗?)
最佳答案
好的,经过一番挖掘,bootstrapValidator插件似乎根本不支持删除附加到输入字段的验证器,而该验证器不能在同一过程中删除。因此,不会取消注册附加到输入字段的触发验证的事件。
临时的解决方法是销毁bootstrapValidator实例,将表单的data-*
属性设置为null并重新初始化插件。此代码代替了bootstrapValidator.removeField()
调用:
bootstrapValidator.destroy();
$('#formCreate').data('bootstrapValidator', null);
$('#formCreate').bootstrapValidator();
更新
完成此操作的另一种更好的方法是使用bootstrapValidator的启用/禁用功能:
bootstrapValidator
.enableFieldValidators
(
'inputReason',
self.SelectedAbsenceType().ReasonRequired
);
(感谢@nghuuphuoc指出这一点)