我正在尝试验证是否应选中一个复选框,我正在使用订阅,但我不确定为什么它不起作用,我尝试了一个带有文本字段的类似逻辑并且它起作用了。我创建了一个小演示:
<input type ="checkbox" data-bind="checked: IsSelected"/>
<input type ="text" data-bind="value: Name"/>
var model = {
IsSelected : ko.observable(false),
Name: ko.observable("")
}
var demo = 1;
model.IsSelected.subscribe(function(value){
if (demo == 2 && value){
model.IsSelected(false);
}
demo = 2;
});
model.Name.subscribe(function(value){
if (value == "Set"){
model.Name("Jose");
}
})
ko.applyBindings(model);
http://jsfiddle.net/Xepe/9YXTW/
我不确定我是否做错了什么。
提前致谢。
最佳答案
我认为该事件在浏览器更新复选框之前触发,因此即使 IsSelected
为 false
,它最终看起来已被选中。一种解决方法是使用 _.delay
或 setTimeout
延迟将复选框恢复为 false:
model.IsSelected.subscribe(function(value){
if (demo == 2 && value){
setTimeout(function () { model.IsSelected(false); }, 0);
}
demo = 2;
});
关于javascript - 使用订阅的 Knockout Js 复选框验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19982745/