Javascript KnockoutJS:Click-Bound锚定标记内的复选框不可选
我正在尝试绑定Javascript KnockoutJS:Click-Bound锚定标记内的复选框不可选,javascript,knockout.js,dom-events,event-bubbling,knockout-3.0,Javascript,Knockout.js,Dom Events,Event Bubbling,Knockout 3.0,我正在尝试绑定选中的复选框输入,该复选框输入位于锚定标记内,锚定标记本身是单击绑定的 虽然我知道这可能不是完全有效的(交互内容可能不是锚定标签的后代),但我仍然希望让它按预期工作——即使只是为了理解它 目前,仅处理外部的点击事件,点击从未到达我的复选框 我正在努力实现的一个例子如下: 在浏览了KnockoutJS文档之后,我尝试了锚定标记的单击绑定上的clickBubble:true,但没有成功 如果您感兴趣的话,用例是一个包含链接的无序列表——这些“链接”中的每一个都包含电视节目的信息:标题、
选中的
复选框输入,该复选框输入位于锚定标记内,锚定标记本身是单击
绑定的
虽然我知道这可能不是完全有效的(交互内容可能不是锚定标签的后代),但我仍然希望让它按预期工作——即使只是为了理解它
目前,仅处理外部的点击事件,点击从未到达我的复选框
我正在努力实现的一个例子如下:
在浏览了KnockoutJS文档之后,我尝试了锚定标记的单击
绑定上的clickBubble:true
,但没有成功
如果您感兴趣的话,用例是一个包含链接的无序列表——这些“链接”中的每一个都包含电视节目的信息:标题、演员、图像、概要。该节目是可选择的,但也有“快速行动”来将其标记为已观看、启动,等等
是否有其他方法可以使复选框在锚定标记内工作?我编写了一个类似于“clickBubble”的自定义绑定处理程序,但是mines允许您阻止任何事件的传播
以下是绑定处理程序:
ko.bindingHandlers.preventBubble = {
init: function (element, valueAccessor) {
var eventName = ko.utils.unwrapObservable(valueAccessor());
var arr = eventName;
if (!eventName.pop) {
arr = [arr];
}
for (var p in arr) {
ko.utils.registerEventHandler(element, arr[p], function (event) {
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
});
}
}
};
下面是您的示例。非常感谢您-这个bindingHandler非常有用,是一个非常漂亮的解决方案!没问题,伙计,很高兴我能帮上忙:)让我问你一个问题,为什么你想在锚定
标记中包含复选框?你可以将它保留在外面,让一切正常工作。FYI@GoodQuestion/Answer。这里的例子是对我“继承”的相当复杂的标记/样式的过度简化,由于模板/样式/连续性的原因,目前无法更改。对HTML5规范有一个相当的了解。我知道它应该是什么样子,并且正在努力改变它-但是我现在很确定。可能是重复的