@@ -144,6 +144,12 @@ return $.widget( "ui.selectmenu", {
144
144
role : "listbox" ,
145
145
select : function ( event , ui ) {
146
146
event . preventDefault ( ) ;
147
+
148
+ // support: IE8
149
+ // If the item was selected via a click, the text selection
150
+ // will be destroyed in IE
151
+ that . _setSelection ( ) ;
152
+
147
153
that . _select ( ui . item . data ( "ui-selectmenu-item" ) , event ) ;
148
154
} ,
149
155
focus : function ( event , ui ) {
@@ -254,6 +260,7 @@ return $.widget( "ui.selectmenu", {
254
260
this . isOpen = false ;
255
261
this . _toggleAttr ( ) ;
256
262
263
+ this . range = null ;
257
264
this . _off ( this . document ) ;
258
265
259
266
this . _trigger ( "close" , event ) ;
@@ -342,6 +349,29 @@ return $.widget( "ui.selectmenu", {
342
349
this [ this . isOpen ? "close" : "open" ] ( event ) ;
343
350
} ,
344
351
352
+ _setSelection : function ( ) {
353
+ var selection ;
354
+
355
+ if ( ! this . range ) {
356
+ return ;
357
+ }
358
+
359
+ if ( window . getSelection ) {
360
+ selection = window . getSelection ( ) ;
361
+ selection . removeAllRanges ( ) ;
362
+ selection . addRange ( this . range ) ;
363
+
364
+ // support: IE8
365
+ } else {
366
+ this . range . select ( ) ;
367
+ }
368
+
369
+ // support: IE
370
+ // Setting the text selection kills the button focus in IE, but
371
+ // restoring the focus doesn't kill the selection.
372
+ this . button . focus ( ) ;
373
+ } ,
374
+
345
375
_documentClick : {
346
376
mousedown : function ( event ) {
347
377
if ( ! this . isOpen ) {
@@ -357,11 +387,25 @@ return $.widget( "ui.selectmenu", {
357
387
_buttonEvents : {
358
388
359
389
// Prevent text selection from being reset when interacting with the selectmenu (#10144)
360
- mousedown : function ( event ) {
361
- event . preventDefault ( ) ;
390
+ mousedown : function ( ) {
391
+ var selection ;
392
+
393
+ if ( window . getSelection ) {
394
+ selection = window . getSelection ( ) ;
395
+ if ( selection . rangeCount ) {
396
+ this . range = selection . getRangeAt ( 0 ) ;
397
+ }
398
+
399
+ // support: IE8
400
+ } else {
401
+ this . range = document . selection . createRange ( ) ;
402
+ }
362
403
} ,
363
404
364
- click : "_toggle" ,
405
+ click : function ( event ) {
406
+ this . _setSelection ( ) ;
407
+ this . _toggle ( event ) ;
408
+ } ,
365
409
366
410
keydown : function ( event ) {
367
411
var preventDefault = true ;
0 commit comments