Skip to content

Instantly share code, notes, and snippets.

@adriengibrat
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adriengibrat/9ac5b0be6de877b576e7 to your computer and use it in GitHub Desktop.
Save adriengibrat/9ac5b0be6de877b576e7 to your computer and use it in GitHub Desktop.
[Hack] jQuery2 method: trigger event handlers but the ones with given namespace
(function( $ ) {
var d = $(document),
log = function (event) { d.on(event, function(e) { console.log(event, e.type, e.namespace, e.namespace_re) }) }
log("test")
log("test.a")
log("test.b")
log("test.b.a")
log("test.c")
d.triggerBut("test", "b")
d.triggerBut("test.a", "b")
})(jQuery);
(function( $ ) {
$.fn.triggerBut = function( event, namespace, data ) {
// make sure event is a jQuery event
if ( !event[ $.expando ] ) {
event = new $.Event(
Object.prototype.hasOwnProperty.call( event, "type" ) ? event.type : event,
typeof event === "object" && event
)
}
// substitute event.isPropagationStopped on first iteration only to replace namespace regex
var isPropagationStopped = event.isPropagationStopped // backup original isPropagationStopped
event.isPropagationStopped = function() {
if ( !event.namespace_but ) {
event.namespace_but = new RegExp( // inject modified namespace regex only once
"^(?!(.*\\.|)" + namespace + "(\\.|$))" +
(event.namespace_re ? event.namespace_re.source.replace("(^|\\.)", "(.*\\.|)") : "")
)
}
event.namespace_re = event.namespace_but // replace original regex with modified namespace regex
event.isPropagationStopped = isPropagationStopped // restore original isPropagationStopped
return isPropagationStopped() // call original isPropagationStopped
}
return $.fn.trigger.call(this, event, data) // call trigger with modified event
}
})(jQuery);
@adriengibrat
Copy link
Author

Works with jQuery 2.1.1, but depends on how "event.namespace_re" is named and crafted....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment