javascript - 使用订阅的 Knockout Js 复选框验证

标签 javascript jquery knockout.js

我正在尝试验证是否应选中一个复选框,我正在使用订阅,但我不确定为什么它不起作用,我尝试了一个带有文本字段的类似逻辑并且它起作用了。我创建了一个小演示:

<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/

我不确定我是否做错了什么。

提前致谢。

最佳答案

我认为该事件在浏览器更新复选框之前触发,因此即使 IsSelectedfalse,它最终看起来已被选中。一种解决方法是使用 _.delaysetTimeout 延迟将复选框恢复为 false:

model.IsSelected.subscribe(function(value){
    if (demo == 2 && value){
        setTimeout(function () { model.IsSelected(false); }, 0);
    }
    demo = 2; 
});

http://jsfiddle.net/9YXTW/17/

关于javascript - 使用订阅的 Knockout Js 复选框验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19982745/

相关文章:

c# - 如果验证错误则停止回发

javascript - 如何设置默认时间和分钟

javascript - 我无法在评论下通过 Ajax 获得评论回复而不刷新

javascript - 如何使用 javascript 或 jquery 发送电子邮件

javascript - 如何将此代码转换为链式 promise ?

模糊事件的Javascript测试

javascript - KoJs : bind a dynamic number of text boxes to elements of an array

javascript - CSV 数据导入到可嵌套 json 数据

javascript - 如何对 JSON 字符串使用 string.replace() ?

javascript - JQuery - 创建后淡出元素