diff options
author | Felix Nagel <info@felixnagel.com> | 2012-01-26 23:10:35 +0100 |
---|---|---|
committer | Felix Nagel <info@felixnagel.com> | 2012-01-26 23:10:35 +0100 |
commit | 827a8cb35ccf0e7a1d5532887c7d5e8c6185df13 (patch) | |
tree | dcd5131c2f9fec297b533b2931d8076001767a9f /ui/jquery.ui.selectmenu.js | |
parent | 30211901a809a3efc19af208f2bcea61e583c61a (diff) | |
download | jquery-ui-827a8cb35ccf0e7a1d5532887c7d5e8c6185df13.tar.gz jquery-ui-827a8cb35ccf0e7a1d5532887c7d5e8c6185df13.zip |
Selectmenu: improved handling of keypress events
Diffstat (limited to 'ui/jquery.ui.selectmenu.js')
-rw-r--r-- | ui/jquery.ui.selectmenu.js | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/ui/jquery.ui.selectmenu.js b/ui/jquery.ui.selectmenu.js index 629f1012e..6cb2c3014 100644 --- a/ui/jquery.ui.selectmenu.js +++ b/ui/jquery.ui.selectmenu.js @@ -123,18 +123,10 @@ $.widget( "ui.selectmenu", { // init menu widget this.menu.menu({ select: function( event, ui ) { - var item = ui.item.data( "item.selectmenu" ), - oldIndex = that.element[0].selectedIndex; - - // change native select element - that.element[0].selectedIndex = item.index; - that._setSelected(); - that._trigger( "select", event, { item: item } ); - - if ( item.index != oldIndex ) { - that._trigger( "change", event, { item: item } ); - } - + var item = ui.item.data( "item.selectmenu" ); + + that._select( item, event ); + if ( that.isOpen ) { event.preventDefault(); that.close( event, true); @@ -143,10 +135,15 @@ $.widget( "ui.selectmenu", { focus: function( event, ui ) { var item = ui.item.data( "item.selectmenu" ); - if ( that.focus !== undefined && item.index != that.focus ) { - that._trigger( "focus", event, { item: item } ); - } - that.focus = item.index; + if ( that.focus !== undefined ) { + if ( item.index != that.focus ) { + that._trigger( "focus", event, { item: item } ); + } + if ( !that.isOpen ) { + that._select( item, event ); + } + } + that.focus = item.index; } }) // change ARIA role @@ -176,6 +173,9 @@ $.widget( "ui.selectmenu", { // adjust ARIA this.menuItems.find( 'a' ).attr( 'role', 'option' ); + + // select current item + this.menu.menu( "focus", null, this._getSelectedItem() ); this._setSelected(); // set and transfer disabled state @@ -277,23 +277,14 @@ $.widget( "ui.selectmenu", { return li.appendTo( ul ); }, - _move: function( direction, event ) { + _move: function( direction, event ) { if ( direction == "first" || direction == "last" ) { // set focus manually for first or last item this.menu.menu( "focus", event, this.menuItems[ direction ]() ); } else { - // if menu is closed we need to focus the element first to indicate correct element - if ( !this.isOpen ) { - this.menu.menu( "focus", event, this._getSelectedItem() ); - } // move to and focus next or prev item this.menu.menu( direction, event ); } - - // select if selectmenu is closed - if ( !this.isOpen ) { - this.menu.menu( "select", event ); - } }, _getSelectedItem: function() { @@ -367,6 +358,19 @@ $.widget( "ui.selectmenu", { } }, + _select: function( item, event ) { + var oldIndex = this.element[0].selectedIndex; + + // change native select element + this.element[0].selectedIndex = item.index; + this._setSelected(); + this._trigger( "select", event, { item: item } ); + + if ( item.index != oldIndex ) { + this._trigger( "change", event, { item: item } ); + } + }, + _setSelected: function() { var item = this._getSelectedItem(), link = item.find("a"); |