Javascript 剔除自定义验证:如何检查可观察值是否等于特定值?

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()

我是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()" 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”))