简体   繁体   中英

One listener for ALL events in jQuery event namespace?

I know I have the ability to namespace events using jQuery's, $.fn.on, off and trigger functions. Is it possible to set up a handler that is able to listen to ALL events in a certain namespace?

Such as:

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

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

With the intended behavior being that the listener would capture any event triggered with the specified namespace...

The end-goal is simply to be able to listen to a group of events that will actually be fired by code that I don't have access too. I'd like to be able to say, "just add your event to this namespace," and then be able to capture those without needing to know the event names themselves; only the namespace.

Possible?

Edit, Updated

Try

    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/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM