knockoutjs:防止事件冒泡对于没有处理元素(knockoutjs: prevent even

2019-08-04 06:36发布

这似乎是结合<event>Bubble: false ,只有当有工作定义的事件处理程序 ( 见注4) <event>

这里有一个例子小提琴 。

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

我想我的问题是,是否有另一个淘汰赛的方式来实现这一目标而无需额外的绑定?

Answer 1:

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

然后只要把:

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

您还可以进一步提高,如果必要接受事件的数组。

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



文章来源: knockoutjs: prevent event bubbling for elements with no handler