Skip to content

Commit ad11d34

Browse files
committed
Fixes for large data sets
- Don't bind the element if it already exists - Use closest instead of parents and remove each for selectable mouseStart event
1 parent e7a10c7 commit ad11d34

File tree

2 files changed

+23
-24
lines changed

2 files changed

+23
-24
lines changed

ui/widget.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,9 @@ $.Widget.prototype = {
590590
delegateElement = this.widget();
591591
} else {
592592
element = delegateElement = $( element );
593-
this.bindings = this.bindings.add( element );
593+
if ( !this.bindings.find(element).length ) {
594+
this.bindings = this.bindings.add( element );
595+
}
594596
}
595597

596598
$.each( handlers, function( event, handler ) {

ui/widgets/selectable.js

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -139,31 +139,28 @@ return $.widget( "ui.selectable", $.ui.mouse, {
139139
}
140140
} );
141141

142-
$( event.target ).parents().addBack().each( function() {
143-
var doSelect,
144-
selectee = $.data( this, "selectable-item" );
145-
if ( selectee ) {
146-
doSelect = ( !event.metaKey && !event.ctrlKey ) ||
142+
var element = $( event.target ).closest( ":data(selectable-item)" );
143+
if ( element.length ) {
144+
var selectee = element.data( "selectable-item" ),
145+
doSelect = ( !event.metaKey && !event.ctrlKey) ||
147146
!selectee.$element.hasClass( "ui-selected" );
148-
that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
149-
._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
150-
selectee.unselecting = !doSelect;
151-
selectee.selecting = doSelect;
152-
selectee.selected = doSelect;
153-
154-
// selectable (UN)SELECTING callback
155-
if ( doSelect ) {
156-
that._trigger( "selecting", event, {
157-
selecting: selectee.element
158-
} );
159-
} else {
160-
that._trigger( "unselecting", event, {
161-
unselecting: selectee.element
162-
} );
163-
}
164-
return false;
147+
that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
148+
._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
149+
selectee.unselecting = !doSelect;
150+
selectee.selecting = doSelect;
151+
selectee.selected = doSelect;
152+
153+
// selectable (UN)SELECTING callback
154+
if ( doSelect ) {
155+
that._trigger( "selecting", event, {
156+
selecting: selectee.element
157+
});
158+
} else {
159+
that._trigger( "unselecting", event, {
160+
unselecting: selectee.element
161+
});
165162
}
166-
} );
163+
}
167164

168165
},
169166

0 commit comments

Comments
 (0)