Javascript 单击输入[复选框]的标签将触发两次父项的单击事件(敲除)

Javascript 单击输入[复选框]的标签将触发两次父项的单击事件(敲除),javascript,knockout.js,Javascript,Knockout.js,考虑到我有一个与其对应的链接。在它们的父对象上,我有一个单击绑定 问题是,单击将触发父项的单击两次,而单击将仅触发一次 考虑到我希望将当前的HTML结构保留在元素旁边,有没有一种方法可以使元素的行为类似于元素?aka只触发一次单击 编辑:如果我删除了返回true;语句,它不会触发两次,但也不会选中复选框。选中复选框是必需的。其中我没有对父元素的操作。如果单击,它将检查。我不完全理解为什么会出现这种情况,但是从标签中删除for属性将防止这种情况发生 该标签仍然位于以前的位置 编辑 如果div也需要

考虑到我有一个与其对应的链接。在它们的父对象上,我有一个单击绑定

问题是,单击将触发父项的单击两次,而单击将仅触发一次

考虑到我希望将当前的HTML结构保留在元素旁边,有没有一种方法可以使元素的行为类似于元素?aka只触发一次单击


编辑:如果我删除了返回true;语句,它不会触发两次,但也不会选中复选框。选中复选框是必需的。其中我没有对父元素的操作。如果单击,它将检查。

我不完全理解为什么会出现这种情况,但是从标签中删除for属性将防止这种情况发生

该标签仍然位于以前的位置

编辑 如果div也需要设置框,请尝试以下操作: HTML:

}

ko.applybindingsnewtestvm

您可以使用

    event.preventDefault(); // stop bubbling
或者干脆

    return false; // is equals to: event.stopPropagation(); event.preventDefault();
在parentAction函数中

使现代化 看起来click事件是从选中的knockout绑定触发的。 下面的代码将修复它,但闻起来像是黑客。也许有人会建议更好的治疗

function testVM(){
    var self = this;

    self.checkedFlag = ko.observable(false);

    self.checkedFlag.subscribe(function() {
        event.stopPropagation();
    });

    self.parentAction = function(data, event){
        alert('triggered');
        //event.stopPropagation();
        //event.preventDefault();
        return true;
    };
}
我为你找到了答案。诀窍是使用自定义绑定使标签停止冒泡

<label for="test" data-bind="stopBubble:parentAction">TestLabel</label>
stopBubble绑定在链接处,也在小提琴中


谢谢你的意见。我编辑了我的问题,包括一些我最初忘记的重要信息:基本上,如果我删除标签和输入之间的“链接”属性,输入将不会被选中。单击div时也需要选中该框?感谢您的输入。请参见问题的编辑部分:
function testVM(){
    var self = this;

    self.checkedFlag = ko.observable(false);

    self.checkedFlag.subscribe(function() {
        event.stopPropagation();
    });

    self.parentAction = function(data, event){
        alert('triggered');
        //event.stopPropagation();
        //event.preventDefault();
        return true;
    };
}
<label for="test" data-bind="stopBubble:parentAction">TestLabel</label>