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

Ste*_*ven 8 events event-handling event-bubbling knockout.js

似乎绑定<event>Bubble: false仅在有定义的事件处理程序(参见注释4)时才有效<event>.

这里有一个例子小提琴.

对于具有对某些事件的处理程序本土元素(例如点击:<textarea>,<a>,<select>等),其中原生处理器就足够了,我希望设置绑定,例如,clickBubble: false在他们身上,而不需要绑定一个"假"的处理程序,工作.

我想我的问题是,有没有另外的淘汰方式来实现这个没有额外的绑定?

RP *_*yer 23

Bubble处理器是不实际的结合处理,并用作选择event绑定(click绑定调用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();
           }                
        });
    }        
};
Run Code Online (Sandbox Code Playgroud)

然后就是:

<input data-bind="preventBubble: 'click'" />
Run Code Online (Sandbox Code Playgroud)

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

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