Javascript 剔除自定义验证:如何检查可观察值是否等于特定值?
我是Knockout.js的新手,我想检查表单中的字段是否有特定值。实际上,我只检查是否需要。我该怎么办 以下是我的html页面中的内容:Javascript 剔除自定义验证:如何检查可观察值是否等于特定值?,javascript,knockout.js,knockout-validation,Javascript,Knockout.js,Knockout Validation,我是Knockout.js的新手,我想检查表单中的字段是否有特定值。实际上,我只检查是否需要。我该怎么办 以下是我的html页面中的内容: <div data-bind="visible: !Vm.isValid()" class="text-danger">Fill each field to send data, otherwise show this message</div> <input data-bind="enable: Vm.isValid()
<div data-bind="visible: !Vm.isValid()" class="text-danger">Fill each field to send data, otherwise show this message</div>
<input data-bind="enable: Vm.isValid()" type="button" value="Send data!" />
我想做这样的东西,但我不知道怎么做:
var found = "found";
window.Vm = ko.validatedObservable({
name: ko.observable().extend({
required: true,
function: {
if (this.val() == found)
return true; // invalid value, can't submit my form
}
})
});
您可以像这样使用自定义的
验证器:
var found=“found”;
var Vm=ko.validatedObservable({
名称:ko.observable().extend({
所需:{
消息:“这是必填字段”,
},
验证:{
验证程序:(val,paramValue)=>{
//“val”具有在字段中输入的值
//“paramValue”具有在“params”中设置的值
返回值===paramValue
},
消息:“未找到值”+,
参数:找到
}
})
});
ko.applyBindings(Vm)
您可以像这样使用自定义的验证器():
var found=“found”;
var Vm=ko.validatedObservable({
名称:ko.observable().extend({
所需:{
消息:“这是必填字段”,
},
验证:{
验证程序:(val,paramValue)=>{
//“val”具有在字段中输入的值
//“paramValue”具有在“params”中设置的值
返回值===paramValue
},
消息:“未找到值”+,
参数:找到
}
})
});
ko.applyBindings(Vm)
实际上,我建议不要使用淘汰验证库,因为它已经多年没有维护过了。这是一个过时的解决方案,解决了一个已经不存在的问题。在2019年,您可以只使用每个现代浏览器固有的表单验证。只需在表单字段中添加一个required
属性,如果没有填写所有必填字段,表单将不会提交
如果你想让它更有活力,你可以这样做:
function ViewModel() {
var vm = this;
vm.name = ko.observable();
vm.required = ['name', 'email'];
vm.isRequired = isRequired;
function isRequired(field) {
return vm.required.indexOf(field) > -1;
}
}
并使用attr
绑定根据viewmodel中所需元素的数组设置required
属性
<input type="text" data-bind="textInput: name, attr: { required: isRequired('name') }">
实际上,我建议不要使用淘汰验证库,因为它已经多年没有维护过了。这是一个过时的解决方案,解决了一个已经不存在的问题。在2019年,您可以只使用每个现代浏览器固有的表单验证。只需在表单字段中添加一个required
属性,如果没有填写所有必填字段,表单将不会提交
如果你想让它更有活力,你可以这样做:
function ViewModel() {
var vm = this;
vm.name = ko.observable();
vm.required = ['name', 'email'];
vm.isRequired = isRequired;
function isRequired(field) {
return vm.required.indexOf(field) > -1;
}
}
并使用attr
绑定根据viewmodel中所需元素的数组设置required
属性
<input type="text" data-bind="textInput: name, attr: { required: isRequired('name') }">
我将数据作为[“A”,“B”],并基于相同的数据进行搜索
ko.extenders.required=函数(目标,覆盖消息){
//在我们的可观测数据中添加一些子可观测数据
target.hasError=ko.observable();
target.validationMessage=ko.observable();
target.data=ko.observearray([“A”,“B”]);
target.found=ko.observable();
target.foundMessage=ko.observable();
//定义一个函数来进行验证
函数验证(newValue){
target.hasError(newValue?false:true);
target.validationMessage(newValue?“:overrideMessage | |“此字段为必填字段”);
find(target.data().find(函数(元素){returnnewvalue==element;}));
target.found()?target.foundMessage(“元素已找到”):target.foundMessage(“元素未找到”);
}
//初步验证
验证(target());
//每当值更改时进行验证
目标。订阅(验证);
//返回原始的可观测值
回报目标;
};
函数AppViewModel(第一个){
this.firstName=ko.observable(first.extend)({required:”“});
}
ko.applyBindings(新AppViewModel(“C”))代码>
我将数据作为[“A”,“B”],并基于相同的数据进行搜索
ko.extenders.required=函数(目标,覆盖消息){
//在我们的可观测数据中添加一些子可观测数据
target.hasError=ko.observable();
target.validationMessage=ko.observable();
target.data=ko.observearray([“A”,“B”]);
target.found=ko.observable();
target.foundMessage=ko.observable();
//定义一个函数来进行验证
函数验证(newValue){
target.hasError(newValue?false:true);
target.validationMessage(newValue?“:overrideMessage | |“此字段为必填字段”);
find(target.data().find(函数(元素){returnnewvalue==element;}));
target.found()?target.foundMessage(“元素已找到”):target.foundMessage(“元素未找到”);
}
//初步验证
验证(target());
//每当值更改时进行验证
目标。订阅(验证);
//返回原始的可观测值
回报目标;
};
函数AppViewModel(第一个){
this.firstName=ko.observable(first.extend)({required:”“});
}
ko.applyBindings(新AppViewModel(“C”))代码>