bootstrapValidator:如何动态地向现有输入字段添加和删除validation器?
我有一个与knockout.js
绑定并由bootstrapValidator
validation的动态表单。
根据另一个控件的状态,有一个输入字段需要“必需 – validation”。
输入字段:
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'); } }
我面临的问题是,对bootstrapValidator
实例的removeField
的调用似乎并没有完全删除所有注册信息,因为bootstrapValidator
类的updateStatus
方法中存在一个javascriptexception,实际上根本不应该调用它,因为我有删除之前的字段:
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”的值:object为null或undefined
变量field
包含值’inputReason’。
所以我的问题是这个(因为bootstrapValidators removeField
的文档在这方面并不完全清楚:如何删除动态添加的字段输入validation完成?
(旁注:有人可以添加标签boostrapvalidator吗?)
好吧,经过一些挖掘后,似乎bootstrapValidator插件还不支持删除附加到输入字段的validation器,该输入字段不会在同一进程中被删除。 因此,附加到触发validation的输入字段的事件不会被注销。
临时解决方法是销毁bootstrapValidator实例,将表单的data-*
属性设置为null并重新初始化插件。 此代码替换bootstrapValidator.removeField()
调用:
bootstrapValidator.destroy(); $('#formCreate').data('bootstrapValidator', null); $('#formCreate').bootstrapValidator();
更新
另一种更好的方法是使用bootstrapValidator的启用/禁用function:
bootstrapValidator .enableFieldValidators ( 'inputReason', self.SelectedAbsenceType().ReasonRequired );
(感谢@nghuuphuoc指出这一点)