Skip to content

Commit 7b9952c

Browse files
committed
Selectmenu: improve event handling, disable class change when using native menu
1 parent f61e065 commit 7b9952c

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

ui/jquery.ui.selectmenu.js

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,19 @@ $.widget( "ui.selectmenu", {
132132
this.menuInstance = this.menu.menu({
133133
role: "listbox",
134134
select: function( event, ui ) {
135+
var item = ui.item.data( "ui-selectmenu-item" ),
136+
oldIndex = that.element[ 0 ].selectedIndex;
137+
138+
// Change native select element
139+
that.element[ 0 ].selectedIndex = item.index;
140+
135141
event.preventDefault();
136-
that._select( ui.item.data( "ui-selectmenu-item" ), event );
142+
that._select( item, event );
143+
if ( item.index !== oldIndex ) {
144+
that._trigger( "change", event, { item: item } );
145+
}
146+
147+
that.close( event );
137148
},
138149
focus: function( event, ui ) {
139150
var item = ui.item.data( "ui-selectmenu-item" );
@@ -355,7 +366,10 @@ $.widget( "ui.selectmenu", {
355366
}
356367
},
357368
change: function( event ) {
358-
this._select( this.items[ this.element[ 0 ].selectedIndex ], event );
369+
var item = this.items[ this.element[ 0 ].selectedIndex ];
370+
371+
this._select( item, event );
372+
this._trigger( "change", event, { item: item } );
359373
},
360374
keydown: function( event ) {
361375
if ( !this.options.nativeMenu ) {
@@ -430,22 +444,12 @@ $.widget( "ui.selectmenu", {
430444
},
431445

432446
_select: function( item, event ) {
433-
var oldIndex = this.element[ 0 ].selectedIndex;
434-
435-
if ( !this.options.nativeMenu ) {
436-
// Change native select element
437-
this.element[ 0 ].selectedIndex = item.index;
438-
this._setAria( item );
439-
}
440-
441447
this._setText( this.buttonText, item.label );
442448
this._trigger( "select", event, { item: item } );
443449

444-
if ( item.index !== oldIndex ) {
445-
this._trigger( "change", event, { item: item } );
450+
if ( !this.options.nativeMenu ) {
451+
this._setAria( item );
446452
}
447-
448-
this.close( event );
449453
},
450454

451455
_setAria: function( item ) {
@@ -510,11 +514,11 @@ $.widget( "ui.selectmenu", {
510514

511515
_toggleAttr: function(){
512516
this.element.attr( "aria-expanded", this.isOpen );
513-
this.button
514-
.toggleClass( "ui-corner-top", this.isOpen )
515-
.toggleClass( "ui-corner-all", !this.isOpen );
516517

517518
if ( !this.options.nativeMenu ) {
519+
this.button
520+
.toggleClass( "ui-corner-top", this.isOpen )
521+
.toggleClass( "ui-corner-all", !this.isOpen );
518522
this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
519523
this.menu.attr( "aria-hidden", !this.isOpen );
520524
}

0 commit comments

Comments
 (0)