1

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?

Dygerati
  • 646
  • 1
  • 6
  • 16
  • 1
    Could this be of any help: http://stackoverflow.com/questions/9735608/how-to-bind-to-all-custom-events-in-jquery – cjs1978 Oct 06 '14 at 22:47

1 Answers1

3

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/

guest271314
  • 1
  • 15
  • 104
  • 177
  • 1
    Thanks; the main point though is to not have to know the event types; only the namespace. I've updated the question. – Dygerati Oct 08 '14 at 15:56