如果父级具有onclick bind,则单击复选框

时间:2013-11-22 11:36:55

标签: javascript dom knockout.js

如果父母“onclick”事件绑定到某个功能,则会忽略复选框。 我不希望这种情况发生:我该怎么做?我已经删除了我的代码以说明问题。

HTML:

<div class="container" data-bind="click: someFunction">
   Click me: <input type="checkbox" data-bind="checked: selected" />
</div>

JS:

function vm() {
    this.selected = ko.observable(true);
    this.someFunction = function(){};
}
ko.applyBindings(new vm());

小提琴:here。尝试点击复选框:似乎没有任何反应(不正确:我稍后会解释会发生什么)。

删除对容器div的someFunction调用会导致预期的行为。请参阅示例:here。显然,这并不能解决问题,因为我也需要调用someFunction


我已经使用调试器跟踪代码,并注意到实际上没有忽略点击但是发生了一系列长事件,最后一个事件正在恢复复选框的值(因此,使点击无效)。

要使用调试器关注此链,我已在复选框上绑定了一个点击事件。

<div class="container">
    Click me: <input type="checkbox" data-bind="click: startDebug, checked: selected" />
</div>

随意打开您的开发工具,看看我们在startDebug函数内部时是如何实现预期的行为(但稍后会恢复到错误的行为)。拨打调试器电话:here

1 个答案:

答案 0 :(得分:2)

您只需从true处理程序返回click即可触发浏览器的默认点击操作:

function vm() {
    this.selected = ko.observable(true);
    this.someFunction = function(){ return true; };
}

演示JSFiddle

另请参阅文档:Allowing the default click action(可能下一个注释Preventing the event from bubbling也相关)