Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两个相互依赖字段的剔除验证_Javascript_Knockout.js_Knockout Validation - Fatal编程技术网

Javascript 两个相互依赖字段的剔除验证

Javascript 两个相互依赖字段的剔除验证,javascript,knockout.js,knockout-validation,Javascript,Knockout.js,Knockout Validation,考虑以下代码: var MyObjectModel = function(myObject){ var self = this; self.myNumber1 = ko.observable(myObject.number1).trimmed(); self.myNumber2 = ko.observable(myObject.number2).trimmed(); 我想扩展myNumber1和myNumber2,添加敲除验证,这样,如果两者都为空,它就会抛出一个错误,如果其中任何一个都有值,

考虑以下代码:

var MyObjectModel = function(myObject){
var self = this;
self.myNumber1 = ko.observable(myObject.number1).trimmed();
self.myNumber2 = ko.observable(myObject.number2).trimmed();
我想扩展myNumber1和myNumber2,添加敲除验证,这样,如果两者都为空,它就会抛出一个错误,如果其中任何一个都有值,它就会保持正常


你知道我怎样才能做到这一点吗?

你可以使用一个ko.computed来创建一个函数,该函数检查是否至少设置了这两个字段中的任何一个,并且只有在验证过程中才有条件地执行验证

var MyObjectModel = function (myObject) {
    var self = this;
    self.myNumber1 = ko.observable(myObject.number1);
    self.myNumber2 = ko.observable(myObject.number2);

    self.numbersHaveNoValue = ko.computed(function () {
        var value1 = self.myNumber1(), value2 = self.myNumber2();
        return !ko.validation.rules.required.validator(value1, true) &&
               !ko.validation.rules.required.validator(value2, true);
    });

    self.myNumber1.extend({ required: { onlyIf: self.numbersHaveNoValue }});
    self.myNumber2.extend({ required: { onlyIf: self.numbersHaveNoValue }});
}

我创建了一个提琴:

我希望这能帮助我解决当前的问题,但提琴似乎丢失了我不确定,但我想使用
…required.validator(value1,true)
myNumber1
myNumber2
都有错误validation@AndreasNiedermair固定:)
var MyObjectModel = function(myObject) {
    var self = this;
    self.myNumber1 = ko.observable(myObject.number1).trimmed();
    self.myNumber2 = ko.observable(myObject.number2).trimmed();

    self.numberCount = ko.computed(function() {
        var count = 0;
        count += self.myNumber1() != '' ? 1 : 0;
        count += self.myNumber2() != '' ? 1 : 0;
        return count;
    }).extend({min:1});
}