Ole*_*rat 2 javascript jquery knockout.js twitter-bootstrap-3 jqbootstrapvalidation
我有一个动态表单,绑定knockout.js和验证bootstrapValidator.
根据另一个控件的状态,有一个输入字段需要"必需 - 验证".
输入字段:
<textarea id="inputReason" name="inputReason" rows="3"
class="form-control col-lg-8"
data-bind="value: Reason" />
Run Code Online (Sandbox Code Playgroud)
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');
}
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是removeField对bootstrapValidator实例的调用似乎并没有完全删除所有注册信息,因为updateStatus在bootstrapValidator类的方法中存在一个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;
Run Code Online (Sandbox Code Playgroud)
例外:无法获取属性"group"的值:object为null或undefined
该变量field包含值'inputReason'.
所以我的问题是这个(因为bootstrapValidators的文档removeField并不完全清楚:如何删除动态添加的字段输入验证完成?
(旁注:有人可以添加标签boostrapvalidator吗?)
好吧,经过一些挖掘后,似乎bootstrapValidator插件还不支持删除附加到输入字段的验证器,该输入字段不会在同一进程中被删除.因此,附加到触发验证的输入字段的事件不会被注销.
一个临时的解决方法是销毁bootstrapValidator实例,将data-*表单的属性设置为null并重新初始化插件.此代码替换了bootstrapValidator.removeField()调用:
bootstrapValidator.destroy();
$('#formCreate').data('bootstrapValidator', null);
$('#formCreate').bootstrapValidator();
Run Code Online (Sandbox Code Playgroud)
更新
另一种更好的方法是使用bootstrapValidator的启用/禁用功能:
bootstrapValidator
.enableFieldValidators
(
'inputReason',
self.SelectedAbsenceType().ReasonRequired
);
Run Code Online (Sandbox Code Playgroud)
(感谢@nghuuphuoc指出这一点)
| 归档时间: |
|
| 查看次数: |
12034 次 |
| 最近记录: |