diff --git a/ui/widget.js b/ui/widget.js index 30034f5924e..47d6886ee9f 100644 --- a/ui/widget.js +++ b/ui/widget.js @@ -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 ) { diff --git a/ui/widgets/selectable.js b/ui/widgets/selectable.js index ed980cc493e..959930eb1d0 100644 --- a/ui/widgets/selectable.js +++ b/ui/widgets/selectable.js @@ -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 ) { + 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; - - // selectable (UN)SELECTING callback - if ( doSelect ) { - that._trigger( "selecting", event, { - selecting: selectee.element - } ); - } else { - that._trigger( "unselecting", event, { - unselecting: selectee.element - } ); - } - return false; + 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 + } ); } - } ); + } },