jQuery事件名称空间中ALL事件的一个监听器?

时间:2014-10-06 22:42:03

标签: javascript jquery events

我知道我有能力使用jQuery,$ .fn.on,off和触发器功能命名事件。是否可以设置一个能够侦听某个命名空间中的所有事件的处理程序?

如:

$(window).on(".event_namespace", function(e){
    //handler
});

$(window).trigger("testEvent.event_namespace");
$(window).trigger("testEventTwo.event_namespace");

预期的行为是监听器将捕获使用指定命名空间触发的任何事件......

最终目标只是能够收听一组实际上会被我无法访问的代码触发的事件。我希望能够说,"只需将您的活动添加到此命名空间,"然后能够捕获那些而不需要知道事件名称本身;只有命名空间。

可能的?

1 个答案:

答案 0 :(得分:2)

修改,更新

尝试

    var ns = ".event_namespace", log = [];

    // place below block at bottom of script block , 
    // after `n` events attached to `n` window, document, elements 

    // listen for events having `ns` namespace ,
    // attached to `window, document, "*"` , above
    $(window, document, "*").on("event", function(e, ns, type) {
        // do stuff when event having `ns` occurs 
        log.push([ns, type]);
        $("#log").html("type, namespace: " + log.slice(-1)
                       + "<br> total <i>" + ns + "</i> events: " 
                       + log.length)
    });

    // if dynamic elements , events later attached ,
    // re-run this piece to add `event` event to those elements
    $.each([window, document, $("*")], function(k, v) {
        if($._data(v, "events") !== undefined) {
            $.each($._data(v, "events"), function(key, val) {
                if (val[0].namespace === ns.slice(- (ns.length -1))) {
                    $(v).on(key + ns, function(e) {
                         $(e.target).trigger("event", [e.namespace, e.type])
                    })
                }
            })
        }
    });

jsfiddle http://jsfiddle.net/guest271314/s87j4o6r/4/