events - knockout : prevent event bubbling for elements with no handler

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

好像绑定(bind) <event>Bubble: false仅当有 a defined event handler 时才有效(见注 4)<event> .

这是一个示例 fiddle .

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

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

最佳答案

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

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

也许是这样的:

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'" />

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

sample :http://jsfiddle.net/rniemeyer/WcXwZ/

关于events - knockout : prevent event bubbling for elements with no handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942279/

相关文章:

java - 在设计选项卡中双击对象后删除 Netbeans 自动生成的代码

javascript - 无法将事件监听器附加到 IE8 中动态创建的元素

ios - 如何在 iOS 中暂停/恢复/取消事件

c# - 有没有办法在不触发 TextChanged 的​​情况下清除 TextBox 的文本?

javascript - 使用 Knockout 组件时替换容器元素

javascript - 为什么 Tab 键按下导致焦点更改也会触发 keyup 事件?

c# - 为什么 HTMLDocumentEvent onclick 会多次触发?

events - 我们应该将事件存储在数据库中吗? (事件驱动设计)

javascript - Knockout.js 消耗太多内存

javascript - 使用 Ajax 加载 html 后调用 jquery 插件