Made sure that return false works in .live() along with the event object being passed...
[jquery.git] / src / event.js
index 3302656..0710b7b 100644 (file)
@@ -195,9 +195,9 @@ jQuery.event = {
                                // jQuery.Event object
                                e[expando] ? e :
                                // Object literal
-                               jQuery.extend( new jQuery.Event(type), e ) :
+                               jQuery.extend( jQuery.Event(type), e ) :
                                // Just the event type (string)
-                               new jQuery.Event(type);
+                               jQuery.Event(type);
                                
                        e.target = e.target || elem;
                        e.currentTarget = elem;
@@ -306,7 +306,7 @@ jQuery.event = {
                // store a copy of the original event object
                // and "clone" to set read-only properties
                var originalEvent = event;
-               event = new jQuery.Event( originalEvent );
+               event = jQuery.Event( originalEvent );
 
                for ( var i = this.props.length, prop; i; ){
                        prop = this.props[ --i ];
@@ -386,6 +386,10 @@ jQuery.event = {
 };
 
 jQuery.Event = function( src ){
+       // Allow instantiation without the 'new' keyword
+       if( !this.preventDefault )
+               return new jQuery.Event(src);
+       
        // Event object
        if( src && src.type ){
                this.originalEvent = src;
@@ -547,14 +551,18 @@ jQuery.fn.extend({
 });
 
 function liveHandler( event ){
-       var check = RegExp("(^|\\.)" + event.type + "(\\.|$)");
+       var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"), stop = true;
        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 );
+                       if ( elem ) {
+                               var ret = jQuery.event.trigger( event.type, [event, fn.data], elem, false, fn, false );
+                               if ( ret === false )
+                                       stop = false;
+                       }
                }
        });
+       return stop;
 }
 
 function liveConvert(type, selector){