jQuery事件命名空间中所有事件的一个侦听器

One listener for ALL events in jQuery event namespace?

本文关键字:事件 一个 侦听器 命名空间 jQuery      更新时间:2023-09-26

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

例如:

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

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

最终目标只是能够监听一组事件,这些事件实际上将由我无法访问的代码触发。我希望能够说,"只需将您的事件添加到此命名空间中",然后能够捕获这些事件,而无需知道事件名称本身;仅命名空间。

可能吗?

编辑、更新

尝试

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

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