Knockoutjs验证-重新计算验证规则
knockoutjs validation - recompute validation rules
我使用knockoutjs连同knockoutjs验证插件来验证我的视图模型。这是我的javascript代码
// enable validation
ko.validation.init();
// View model
function AppViewModel() {
this.Canceled = ko.observable(false);
this.Name = ko.observable("").extend({
//custom validation
validation: {
validator: function (val, params) {
//alert to show when validation is triggered
alert("validation function was called");
//change validation rule depending on whether cancel button was clicked
if(params.Canceled == true)
return true;
else
return false;
},
message: 'This field is required',
params: {Canceled:this.Canceled()}
}
});
this.errors = ko.validation.group(this);
//function triggered on submit which checks for validation
this.submit = function() {
if(this.errors().length != 0)
this.errors.showAllMessages();
else
alert("no errors detected");
};
//function to cancel validation rules
this.cancelValidation = function() {
this.Canceled(true);
};
}
// Activate knockout.js
ko.applyBindings(new AppViewModel());
这里是我的HTML
Name: <input type="text" data-bind="value: Name"/><br/><br/>
<button data-bind="click: submit">submit</button> <button data-bind="click: cancelValidation">Cancel validation</button>
我想做的是在运行时更改验证规则,如果"取消验证"按钮被点击。为此,我使用了一个自定义验证函数和一个ko。可观察变量"Canceled"。根据"Canceled"的值,验证器函数返回true或false。我遇到的问题是,当页面加载时,验证函数只运行一次。当"Canceled"的值发生变化时,不会重新运行该函数。这是正常行为吗?当我更改"取消"的值时,是否有办法让我重新运行当前模型的验证函数?
这里是一个小提琴来尝试代码。我在验证函数中添加了一个警告,以显示它只在页面加载时运行一次。
http://jsfiddle.net/eewJe/你应该把可观察对象而不是值传递给选项。把
if(params.Canceled == true)
if(params.Canceled() == true)
并传入可观察对象。把
params: {Canceled:this.Canceled()}
params: {Canceled:this.Canceled}
这是更新后的小提琴:http://jsfiddle.net/nEPNC/
没关系,我可以自己解决它。对于遇到这个问题的人,这里是我更新的Javascript
// enable validation
ko.validation.init();
// View model
function AppViewModel() {
var self = this;
this.Canceled = ko.observable(false);
this.Name = ko.observable("").extend({
//custom validation
validation: {
validator: function (val,para) {
//alert to show when validation is triggered
alert("validation function was called");
//change validation rule depending on whether cancel button was clicked
if(self.Canceled() == true)
return true;
else
return false;
},
message: 'This field is required'
}
});
this.errors = ko.validation.group(this);
//function triggered on submit which checks for validation
this.submit = function() {
if(this.errors().length != 0)
this.errors.showAllMessages();
else
alert("no errors detected");
};
//function to cancel validation rules
this.cancelValidation = function() {
this.Canceled(true);
};
}
// Activate knockout.js
ko.applyBindings(new AppViewModel());
我改变了我的验证器函数,直接检查self.Canceled()的值,而不是像我在使用验证器的"params:"属性之前所做的那样,将cancelled作为参数传递。现在一切正常。这是一个更新的小提琴
http://jsfiddle.net/HtYCw/如果有人有更好的方法,我仍然对评论感兴趣。
相关文章:
- 正在验证8个真/假复选框或复选框中的2个
- 借助asp.net验证或java脚本对多个文本进行验证
- jQuery自定义验证比较多个输入的序列
- 使用html中的外部javascript进行数据验证
- 根据元素和容器大小计算边距
- 如何使用jquery Validation验证Formspread
- jquery中的文本框验证
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 在验证和发送邮件后更改联系人表单的 html
- 年龄验证输入框 - 计算是否超过 18 岁
- PhantomJS 使用返回 null 的基本身份验证进行计算
- 淘汰计算和输入验证
- 服务器级SDK,可以加载PDF文件并执行计算和验证代码片段
- PHP/Javascript验证计算
- 无法验证对导入命名空间的计算引用
- 在ORACLE APEX 5.0中以表格形式进行动态计算和验证
- 新页面中的Html/Javascript表单计算和验证
- jsf2-如何使用一个按钮通过javascript进行计算和验证,然后提交和导航
- 立即使用计算的可观察触发器对下拉列表进行挖空验证
- Knockoutjs验证-重新计算验证规则