mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
Selectmenu: Preserve text selection and button focus on click
Fixes #10639 Closes gh-1358
This commit is contained in:
parent
73cdc09e9a
commit
d4a437e4b0
@ -144,6 +144,12 @@ return $.widget( "ui.selectmenu", {
|
|||||||
role: "listbox",
|
role: "listbox",
|
||||||
select: function( event, ui ) {
|
select: function( event, ui ) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
|
// support: IE8
|
||||||
|
// If the item was selected via a click, the text selection
|
||||||
|
// will be destroyed in IE
|
||||||
|
that._setSelection();
|
||||||
|
|
||||||
that._select( ui.item.data( "ui-selectmenu-item" ), event );
|
that._select( ui.item.data( "ui-selectmenu-item" ), event );
|
||||||
},
|
},
|
||||||
focus: function( event, ui ) {
|
focus: function( event, ui ) {
|
||||||
@ -254,6 +260,7 @@ return $.widget( "ui.selectmenu", {
|
|||||||
this.isOpen = false;
|
this.isOpen = false;
|
||||||
this._toggleAttr();
|
this._toggleAttr();
|
||||||
|
|
||||||
|
this.range = null;
|
||||||
this._off( this.document );
|
this._off( this.document );
|
||||||
|
|
||||||
this._trigger( "close", event );
|
this._trigger( "close", event );
|
||||||
@ -342,6 +349,29 @@ return $.widget( "ui.selectmenu", {
|
|||||||
this[ this.isOpen ? "close" : "open" ]( event );
|
this[ this.isOpen ? "close" : "open" ]( event );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_setSelection: function() {
|
||||||
|
var selection;
|
||||||
|
|
||||||
|
if ( !this.range ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( window.getSelection ) {
|
||||||
|
selection = window.getSelection();
|
||||||
|
selection.removeAllRanges();
|
||||||
|
selection.addRange( this.range );
|
||||||
|
|
||||||
|
// support: IE8
|
||||||
|
} else {
|
||||||
|
this.range.select();
|
||||||
|
}
|
||||||
|
|
||||||
|
// support: IE
|
||||||
|
// Setting the text selection kills the button focus in IE, but
|
||||||
|
// restoring the focus doesn't kill the selection.
|
||||||
|
this.button.focus();
|
||||||
|
},
|
||||||
|
|
||||||
_documentClick: {
|
_documentClick: {
|
||||||
mousedown: function( event ) {
|
mousedown: function( event ) {
|
||||||
if ( !this.isOpen ) {
|
if ( !this.isOpen ) {
|
||||||
@ -357,11 +387,25 @@ return $.widget( "ui.selectmenu", {
|
|||||||
_buttonEvents: {
|
_buttonEvents: {
|
||||||
|
|
||||||
// Prevent text selection from being reset when interacting with the selectmenu (#10144)
|
// Prevent text selection from being reset when interacting with the selectmenu (#10144)
|
||||||
mousedown: function( event ) {
|
mousedown: function() {
|
||||||
event.preventDefault();
|
var selection;
|
||||||
|
|
||||||
|
if ( window.getSelection ) {
|
||||||
|
selection = window.getSelection();
|
||||||
|
if ( selection.rangeCount ) {
|
||||||
|
this.range = selection.getRangeAt( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
// support: IE8
|
||||||
|
} else {
|
||||||
|
this.range = document.selection.createRange();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
click: "_toggle",
|
click: function( event ) {
|
||||||
|
this._setSelection();
|
||||||
|
this._toggle( event );
|
||||||
|
},
|
||||||
|
|
||||||
keydown: function( event ) {
|
keydown: function( event ) {
|
||||||
var preventDefault = true;
|
var preventDefault = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user