Bug Tracker

Ticket #2889: eachBound.diff

File eachBound.diff, 2.0 KB (added by flesler, 14 years 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});