Bug Tracker

Ticket #2889: eachBound.diff

File eachBound.diff, 2.0 kB (added by flesler, 8 months ago)
  • src/core.js

     
    743743 
    744744        return object; 
    745745    }, 
    746  
     746     
     747    // internal, node is the root 
     748    eachBound: function ( node, fn ){ 
     749        var nodes = node.getElementsByTagName('*'), 
     750            index = nodes.length, 
     751            events; 
     752         
     753        // add the root node itself 
     754        nodes[ index ] = node; 
     755         
     756        do{ 
     757            node = nodes[ index ]; 
     758            if( node && node.nodeType == 1 && node[ expando ] && ( events = $.data(node, 'events') ) ) 
     759                fn.call( node, events ); 
     760                 
     761        }while( index-- ); 
     762    }, 
     763     
    747764    prop: function( elem, value, type, i, name ) { 
    748765            // Handle executable functions 
    749766            if ( jQuery.isFunction( value ) ) 
     
    13031320    remove: function( selector ) { 
    13041321        if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) { 
    13051322            // Prevent memory leaks 
    1306             jQuery( "*", this ).add(this).each(function(){ 
     1323            jQuery.eachBound( this, function(){ 
    13071324                jQuery.event.remove(this); 
    13081325                jQuery.removeData(this); 
    13091326            }); 
  • src/event.js

     
    167167        // Handle a global trigger 
    168168        if ( !elem ) { 
    169169            // Only trigger if we've ever bound an event for it 
    170             if ( this.global[type] ) 
    171                 jQuery("*").add([window, document]).trigger(type, data); 
     170            if ( this.global[type] ){ 
     171                jQuery.eachBound( document, function( events ){ 
     172                    if( events[type] ) 
     173                        jQuery.event.trigger( type, data, this, true ); 
     174                }); 
     175                jQuery.event.trigger( type, data, window, true ); 
     176            } 
    172177 
    173178        // Handle triggering a single element 
    174179        } else { 
     
    597602// And prevent errors on refresh with events like mouseover in other browsers 
    598603// Window isn't included so as not to unbind existing unload events 
    599604jQuery(window).bind("unload", function() { 
    600     jQuery("*").add(document).unbind(); 
     605    jQuery.eachBound( document, function(){ 
     606        jQuery.event.remove(this); 
     607    }); 
    601608});