knockoutjs:阻止没有处理程序的元素冒泡

时间:2012-12-18 22:06:37

标签: events event-handling knockout.js event-bubbling

似乎绑定<event>Bubble: false仅在<event>的{​​{3}}(参见注释4 )时才有效。

以下是a defined event handler的示例。

对于具有某些事件的本机处理程序的元素(例如,单击:<textarea><a><select>等),本机处理程序就足够了,我希望设置绑定,例如,clickBubble: false在他们身上,而不必绑定“虚假”处理程序,以便工作。

我想我的问题是,如果没有额外的绑定,是否还有另一种淘汰方式来实现这一目标?

1 个答案:

答案 0 :(得分:22)

Bubble处理程序不是实际的绑定处理程序,在event绑定(click绑定调用event绑定)中用作选项。所以,他们不会独自运行。

所以,你可以添加一个“伪”no-op处理程序并使用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/