8

似乎绑定<event>Bubble: false为. _<event>

这是一个示例fiddle

对于具有某些事件的本机处理程序(例如 click: <textarea><a><select>等)的元素,本机处理程序就足够了,我希望clickBubble: false在它们上设置绑定,例如,无需绑定“虚假”处理程序即可工作。

我想我的问题是,是否有另一种淘汰方法可以在没有额外绑定的情况下实现这一目标?

4

1 回答 1

24

处理程序不是实际的Bubble绑定处理程序,而是用作绑定中的选项eventclick绑定调用event绑定)。因此,它们不会自行运行。

因此,您可以添加一个“伪造的”无操作处理程序并使用clickBubble,或者您当然可以选择创建一个自定义绑定来为您执行此操作。

也许是这样的:

ko.bindingHandlers.preventBubble = {
    init: function(element, valueAccessor) {
        var eventName = ko.utils.unwrapObservable(valueAccessor());
        ko.utils.registerEventHandler(element, eventName, function(event) {
           event.cancelBubble = true;
           if (event.stopPropagation) {
                event.stopPropagation();
           }                
        });
    }        
};

然后放:

<input data-bind="preventBubble: 'click'" />

如有必要,您还可以进一步增强它以接受一系列事件。

示例:http: //jsfiddle.net/rniemeyer/WcXwZ/

于 2012-12-18T22:43:11.997 回答