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