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