挖空.js两个输入字段的逻辑 OR 的自定义验证规则
Knockout.js custom validation rule for logical OR for two input fields
如何使用挖空.js验证两个输入字段?规则是:必须至少填写一个输入字段。
ko.validation.rules['OR'] = {
validator: function (val, otherVal) {
return (val || otherVal);
},
message: "you have to fill in at least one of the two input fields!"
};
ko.validation.registerExtenders();
self.description = ko.observable().extend({ OR: self.title });
self.title = ko.observable().extend({ OR: self.description });
目前:在初始化时,只有一个字段是红色的,一个是绿色的 - 它们在开始时都应该是红色的。
https://github.com/Knockout-Contrib/Knockout-Validation
self.title = ko.observable().extend({ OR: self.description });
self.description = ko.observable().extend({ OR: self.title });
title
有效,但description
在启动时无效。 当我将代码顺序更改为:
self.description = ko.observable().extend({ OR: self.title });
self.title = ko.observable().extend({ OR: self.description });
那就相反了。
即使是 KnockOut 贡献中的例子也对我不起作用:https://github.com/Knockout-Contrib/Knockout-Validation/wiki/User-Contributed-Rules
ko.validation.rules['requiresOneOf'] = {
getValue: function (o) {
return (typeof o === 'function' ? o() : o);
},
validator: function (val, fields) {
var self = this;
var anyOne = ko.utils.arrayFirst(fields, function (field) {
var stringTrimRegEx = /^'s+|'s+$/g,
testVal;
var val = self.getValue(field);
if (val === undefined || val === null)
return !required;
testVal = val;
if (typeof (val) == "string") {
testVal = val.replace(stringTrimRegEx, '');
}
return ((testVal + '').length > 0);
});
return (anyOne != null);
},
message: 'One of these fields is required'
};
self.title = ko.observable();
self.description = ko.observable();
self.title.extend({requiresOneOf: [self.title, self.description]});
self.description.extend({requiresOneOf: [self.title, self.description]});
我发现了错误。实际上这是一个先有鸡还是先有蛋的问题。
在我为验证提供标题或描述的那一刻,它们尚未初始化。我将代码更改为此代码,现在它可以工作:
//define the validation rule:
ko.validation.rules['Or'] = {
validator: function (val, params) {
"use strict";
return (val !== "" && val !== undefined) || ( params.other() !== "" && params.other() !== undefined);
},
message: "you have to fill in at least one of the two input fields!"
};
ko.validation.registerExtenders();
//apply the validation rule:
self= this;
self.description = ko.observable();
self.title = ko.observable();
self.title.extend({
or: {
params: {other: self.description},
message: "Please fill at least one field!"
}
});
self.description.extend({
or: {
params: {other: self.title},
message: "Please fill at least one field!"
}});
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- jQuery自定义验证比较多个输入的序列
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 在wordpress一定时间后更改自定义字段
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 自定义函数中的光标位置
- 用于检查数组中是否存在元素的javascript自定义方法
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- Meteor-添加用户自定义字段的方法不起作用
- 自定义表单验证和提交
- jQuery工具验证器自定义效果-添加&消除影响
- 可以't计算自定义谷歌地图的js
- 谷歌水印未显示在自定义搜索框中
- vaadin:使用自定义布局集成angular js
- DataTables-创建自定义分页样式(加载更多样式)
- 实现一个建立在google.com之上的自定义搜索引擎
- 添加自定义标记以自动完成
- 如何使用自定义标头跨域执行AJAX POST
- 挖空.js两个输入字段的逻辑 OR 的自定义验证规则