Last active
August 29, 2015 14:05
-
-
Save adriengibrat/9ac5b0be6de877b576e7 to your computer and use it in GitHub Desktop.
[Hack] jQuery2 method: trigger event handlers but the ones with given namespace
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Works with jQuery 2.1.1, but depends on how "event.namespace_re" is named and crafted....