Javascript 检查是否在Knockout.js中设置了输入

Javascript 检查是否在Knockout.js中设置了输入,javascript,knockout.js,Javascript,Knockout.js,我正在使用knockout.js,我想检查两个文本输入是否有一个值集。如果是,那就做点什么 下面的方法很有效,但我想知道是否有“淘汰”的方法可以使用自定义绑定或其他方法来实现。我只是想了解更多关于knockout的信息,以便在将来更复杂的情况下利用它的功能 function DatesViewModel(startDate,endDate){ var self = this; self.startDate = ko.observable(""); self.endDat

我正在使用knockout.js,我想检查两个文本输入是否有一个值集。如果是,那就做点什么

下面的方法很有效,但我想知道是否有“淘汰”的方法可以使用自定义绑定或其他方法来实现。我只是想了解更多关于knockout的信息,以便在将来更复杂的情况下利用它的功能

function DatesViewModel(startDate,endDate){

    var self = this;
    self.startDate = ko.observable("");
    self.endDate = ko.observable("");


    self.startDate.subscribe(function(newValue) {
         check_dates();
    });

    self.endDate.subscribe(function(newValue) {
        check_dates();
    });

    function check_dates(){
        if(self.startDate() !== "" && self.endDate() !== ""){
            alert('values set');
        }
    }

}
我试着用一个计算函数来做DoctorMick建议的事情,但要么我误解了它的用法,要么就是它不起作用

self.datesEntered = ko.computed(function() {
    if(self.startDate() !== "" && self.endDate() !== ""){
        return self.startDate() && self.endDate();
    }
});


self.datesEntered.subscribe(function() {
   alert(self.datesEntered);
});

每次更改任一日期时都会触发警报。另外,它只是返回一堆代码。

这取决于您实际要实现的目标,但我会使用基于上述代码段的计算结果,所以

self.DatesEntered = ko.computed(function() {
    return self.startDate() && self.endDate();
});

self.datesEntered.subscribe(function(value) {
   if(value) {
       alert("Hurrah, both values entered");
   }
});

这样,您就可以绑定或订阅DatesEntered,并在两者都输入后执行任何您喜欢的操作。正如您所见,它大大简化了原始代码。

我试图按照您的建议制作一个计算函数,但似乎无法让它正常工作。你能看看我原来的帖子吗?我更新了它。@user1852176-我已经编辑了我的答案。无论何时更改任何一个值,computed都将触发,如果两个值都输入,则返回“truthy”(请参阅:),如果两个值都未输入,则返回falsy值。如果你想检查这个值,你可以根据我更新的答案在订阅中添加value参数。你几乎就到了。你只需要写,只需要写
self.datesEntered()
就可以得到你的计算值,所以把你的代码改成
alert(self.datesEntered())@nemesv有效,尽管返回的值仅为endDate,而不是endDate和endDate。此外,即使只设置了一个日期,也会触发该事件。