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
This commit is contained in:
John Clark 2020-06-11 18:04:38 -04:00
parent e7a10c70ae
commit ad11d34dda
2 changed files with 22 additions and 23 deletions

View File

@ -590,7 +590,9 @@ $.Widget.prototype = {
delegateElement = this.widget();
} else {
element = delegateElement = $( element );
this.bindings = this.bindings.add( element );
if ( !this.bindings.find(element).length ) {
this.bindings = this.bindings.add( element );
}
}
$.each( handlers, function( event, handler ) {

View File

@ -139,31 +139,28 @@ return $.widget( "ui.selectable", $.ui.mouse, {
}
} );
$( event.target ).parents().addBack().each( function() {
var doSelect,
selectee = $.data( this, "selectable-item" );
if ( selectee ) {
doSelect = ( !event.metaKey && !event.ctrlKey ) ||
var element = $( event.target ).closest( ":data(selectable-item)" );
if ( element.length ) {
var selectee = element.data( "selectable-item" ),
doSelect = ( !event.metaKey && !event.ctrlKey) ||
!selectee.$element.hasClass( "ui-selected" );
that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
selectee.unselecting = !doSelect;
selectee.selecting = doSelect;
selectee.selected = doSelect;
that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
selectee.unselecting = !doSelect;
selectee.selecting = doSelect;
selectee.selected = doSelect;
// selectable (UN)SELECTING callback
if ( doSelect ) {
that._trigger( "selecting", event, {
selecting: selectee.element
} );
} else {
that._trigger( "unselecting", event, {
unselecting: selectee.element
} );
}
return false;
// selectable (UN)SELECTING callback
if ( doSelect ) {
that._trigger( "selecting", event, {
selecting: selectee.element
});
} else {
that._trigger( "unselecting", event, {
unselecting: selectee.element
});
}
} );
}
},