Skip to content
This repository was archived by the owner on May 25, 2023. It is now read-only.

Commit 5fd2f73

Browse files
committed
Improve remove event bindings for classes options.
jquery/jquery-ui@ef2e9ba
1 parent d5dfbc6 commit 5fd2f73

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

js/vendor/jquery.ui.widget.js

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -509,11 +509,29 @@
509509
classes: this.options.classes || {}
510510
}, options );
511511

512+
function bindRemoveEvent() {
513+
options.element.each( function( _, element ) {
514+
var isTracked = $.map( that.classesElementLookup, function( elements ) {
515+
return elements;
516+
} )
517+
.some( function( elements ) {
518+
return elements.is( element );
519+
} );
520+
521+
if ( !isTracked ) {
522+
that._on( $( element ), {
523+
remove: "_untrackClassesElement"
524+
} );
525+
}
526+
} );
527+
}
528+
512529
function processClassString( classes, checkOption ) {
513530
var current, i;
514531
for ( i = 0; i < classes.length; i++ ) {
515532
current = that.classesElementLookup[ classes[ i ] ] || $();
516533
if ( options.add ) {
534+
bindRemoveEvent();
517535
current = $( $.unique( current.get().concat( options.element.get() ) ) );
518536
} else {
519537
current = $( current.not( options.element ).get() );
@@ -526,10 +544,6 @@
526544
}
527545
}
528546

529-
this._on( options.element, {
530-
"remove": "_untrackClassesElement"
531-
} );
532-
533547
if ( options.keys ) {
534548
processClassString( options.keys.match( /\S+/g ) || [], true );
535549
}
@@ -547,6 +561,8 @@
547561
that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
548562
}
549563
} );
564+
565+
this._off( $( event.target ) );
550566
},
551567

552568
_removeClass: function( element, keys, extra ) {
@@ -627,7 +643,7 @@
627643
_off: function( element, eventName ) {
628644
eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
629645
this.eventNamespace;
630-
element.off( eventName ).off( eventName );
646+
element.off( eventName );
631647

632648
// Clear the stack to avoid memory leaks (#10056)
633649
this.bindings = $( this.bindings.not( element ).get() );

0 commit comments

Comments
 (0)