【问题标题】:KnockoutJS: Checkbox Inside Click-Bound Anchor-Tag not SelectableKnockoutJS:单击绑定锚标记内的复选框不可选择
【发布时间】:2015-07-02 08:10:48
【问题描述】:

我正在尝试将checked 绑定到位于锚标记内的复选框输入上,该标记本身就是click 绑定的。

虽然我知道这可能并不完全有效(交互式内容可能不是锚标签的后代),但我仍然希望让它按预期工作 - 即使只是为了理解它。

目前,只处理外部click 事件,并且点击永远不会到达我的复选框。

我想要达到的一个例子是:http://jsfiddle.net/fzmppu93/2/

查看了 KnockoutJS 文档后,我在锚标记的 click 绑定上尝试了 clickBubble: true - 无济于事。

如果您有兴趣,该用例是一个包含链接的无序列表 - 每个“链接”都包含有关电视节目的信息:标题、演员、图片、概要。该节目是可选择的,但也有“快速操作”将其标记为已观看、加注星标等。

是否有另一种方法可以使复选框在锚标记中起作用?

【问题讨论】:

  • 让我在这里问你一个问题,为什么要在anchor 标签中包含复选框,您可以将其保留以使一切正常。仅供参考@GoodQuestion/Answer .check here jsfiddle.net/fzmppu93/4
  • 该示例是我“继承”的相当复杂的标记/样式的过度简化,并且由于模板/样式/连续性的原因目前无法更改。对 HTML5 规范有相当的了解。我知道它应该看起来像什么,并且正在努力改变它 - 但我现在受到约束。

标签: javascript knockout.js dom-events event-bubbling knockout-3.0


【解决方案1】:

我已经编写了一个类似于“clickBubble”的自定义绑定处理程序,但是我的允许您阻止任何事件的传播。

这里是绑定处理程序:

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();
                    }
                });
            }
        }
    };

这是您的示例的有效fiddle

【讨论】:

  • 非常感谢 - 这个 bindingHandler 非常有用,是一个非常好的和优雅的解决方案!
  • 没问题的哥们,很高兴我能帮忙:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
相关资源
最近更新 更多