-function liveHandler( event ){
- var check = RegExp("(^|\\.)" + event.type + "(\\.|$)");
- jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
- if ( check.test(fn.type) ) {
- var elem = jQuery(event.target).closest(fn.data)[0];
- if ( elem )
- jQuery.event.trigger( event.type, fn.data, elem, false, fn, false );
+function liveHandler( event ) {
+ var stop = true, elems = [], args = arguments;
+
+ jQuery.each( jQuery.data( this, "events" ).live || [], function( i, fn ) {
+ if ( fn.live === event.type ) {
+ var elem = jQuery( event.target ).closest( fn.selector )[0];
+ if ( elem ) {
+ elems.push({ elem: elem, fn: fn });
+ }
+ }
+ });
+
+ elems.sort(function( a, b ) {
+ return jQuery.data( a.elem, "closest" ) - jQuery.data( b.elem, "closest" );
+ });
+
+ jQuery.each(elems, function() {
+ event.currentTarget = this.elem;
+ event.data = this.fn.data
+ if ( this.fn.apply( this.elem, args ) === false ) {
+ return (stop = false);