@@ -87,6 +87,7 @@ $.fn.dropdown = function(parameters) {
87
87
internalChange = false ,
88
88
iconClicked = false ,
89
89
element = this ,
90
+ focused = false ,
90
91
instance = $module . data ( moduleNamespace ) ,
91
92
92
93
selectActionActive ,
@@ -497,6 +498,11 @@ $.fn.dropdown = function(parameters) {
497
498
;
498
499
} ,
499
500
501
+ clearItems : function ( ) {
502
+ $menu . empty ( ) ;
503
+ module . refreshItems ( ) ;
504
+ } ,
505
+
500
506
toggle : function ( ) {
501
507
module . verbose ( 'Toggling menu visibility' ) ;
502
508
if ( ! module . is . active ( ) ) {
@@ -512,6 +518,9 @@ $.fn.dropdown = function(parameters) {
512
518
? callback
513
519
: function ( ) { }
514
520
;
521
+ if ( ( focused || iconClicked ) && module . is . remote ( ) && module . is . noApiCache ( ) ) {
522
+ module . clearItems ( ) ;
523
+ }
515
524
if ( ! module . can . show ( ) && module . is . remote ( ) ) {
516
525
module . debug ( 'No API results retrieved, searching before show' ) ;
517
526
module . queryRemote ( module . get . query ( ) , module . show , [ callback , preventFocus ] ) ;
@@ -638,6 +647,7 @@ $.fn.dropdown = function(parameters) {
638
647
if ( module . is . multiple ( ) ) {
639
648
$module
640
649
. on ( clickEvent + eventNamespace , module . event . click )
650
+ . on ( clickEvent + eventNamespace , module . event . search . focus )
641
651
;
642
652
}
643
653
}
@@ -767,11 +777,13 @@ $.fn.dropdown = function(parameters) {
767
777
if ( ! Array . isArray ( preSelected ) ) {
768
778
preSelected = preSelected && preSelected !== "" ? preSelected . split ( settings . delimiter ) : [ ] ;
769
779
}
770
- $ . each ( preSelected , function ( index , value ) {
771
- $item . filter ( '[data-value="' + value + '"]' )
772
- . addClass ( className . filtered )
773
- ;
774
- } ) ;
780
+ if ( module . is . multiple ( ) ) {
781
+ $ . each ( preSelected , function ( index , value ) {
782
+ $item . filter ( '[data-value="' + value + '"]' )
783
+ . addClass ( className . filtered )
784
+ ;
785
+ } ) ;
786
+ }
775
787
afterFiltered ( ) ;
776
788
} ) ;
777
789
}
@@ -799,10 +811,14 @@ $.fn.dropdown = function(parameters) {
799
811
} ,
800
812
onError : function ( ) {
801
813
module . add . message ( message . serverError ) ;
814
+ iconClicked = false ;
815
+ focused = false ;
802
816
callback . apply ( null , callbackParameters ) ;
803
817
} ,
804
818
onFailure : function ( ) {
805
819
module . add . message ( message . serverError ) ;
820
+ iconClicked = false ;
821
+ focused = false ;
806
822
callback . apply ( null , callbackParameters ) ;
807
823
} ,
808
824
onSuccess : function ( response ) {
@@ -820,6 +836,15 @@ $.fn.dropdown = function(parameters) {
820
836
if ( values . length === 0 && ! settings . allowAdditions ) {
821
837
module . add . message ( message . noResults ) ;
822
838
}
839
+ else {
840
+ var value = module . is . multiple ( ) ? module . get . values ( ) : module . get . value ( ) ;
841
+ if ( value !== '' ) {
842
+ module . verbose ( 'Value(s) present after click icon, select value(s) in items' ) ;
843
+ module . set . selected ( value , null , null , true ) ;
844
+ }
845
+ }
846
+ iconClicked = false ;
847
+ focused = false ;
823
848
callback . apply ( null , callbackParameters ) ;
824
849
}
825
850
}
@@ -1052,6 +1077,7 @@ $.fn.dropdown = function(parameters) {
1052
1077
} ,
1053
1078
focus : function ( ) {
1054
1079
if ( settings . showOnFocus && ! activated && module . is . hidden ( ) && ! pageLostFocus ) {
1080
+ focused = true ;
1055
1081
module . show ( ) ;
1056
1082
}
1057
1083
} ,
@@ -1101,7 +1127,8 @@ $.fn.dropdown = function(parameters) {
1101
1127
if ( module . is . multiple ( ) ) {
1102
1128
module . remove . activeLabel ( ) ;
1103
1129
}
1104
- if ( settings . showOnFocus || ( event . type !== 'focus' && event . type !== 'focusin' ) ) {
1130
+ if ( ! module . is . active ( ) && ( settings . showOnFocus || ( event . type !== 'focus' && event . type !== 'focusin' ) ) ) {
1131
+ focused = true ;
1105
1132
module . search ( ) ;
1106
1133
}
1107
1134
} ,
@@ -1146,6 +1173,7 @@ $.fn.dropdown = function(parameters) {
1146
1173
} else {
1147
1174
module . toggle ( ) ;
1148
1175
}
1176
+ event . stopPropagation ( ) ;
1149
1177
}
1150
1178
} ,
1151
1179
text : {
@@ -1185,10 +1213,11 @@ $.fn.dropdown = function(parameters) {
1185
1213
$label . addClass ( className . active ) ;
1186
1214
}
1187
1215
settings . onLabelSelect . apply ( this , $labels . filter ( '.' + className . active ) ) ;
1216
+ event . stopPropagation ( ) ;
1188
1217
}
1189
1218
} ,
1190
1219
remove : {
1191
- click : function ( ) {
1220
+ click : function ( event ) {
1192
1221
var
1193
1222
$label = $ ( this ) . parent ( )
1194
1223
;
@@ -1200,6 +1229,7 @@ $.fn.dropdown = function(parameters) {
1200
1229
// remove this label only
1201
1230
module . remove . activeLabels ( $label ) ;
1202
1231
}
1232
+ event . stopPropagation ( ) ;
1203
1233
}
1204
1234
} ,
1205
1235
test : {
@@ -1212,6 +1242,9 @@ $.fn.dropdown = function(parameters) {
1212
1242
if ( module . is . bubbledLabelClick ( event ) || module . is . bubbledIconClick ( event ) ) {
1213
1243
return ;
1214
1244
}
1245
+ if ( ! module . is . multiple ( ) || ( module . is . multiple ( ) && ! module . is . active ( ) ) ) {
1246
+ focused = true ;
1247
+ }
1215
1248
if ( module . determine . eventOnElement ( event , toggleBehavior ) ) {
1216
1249
event . preventDefault ( ) ;
1217
1250
}
@@ -2696,7 +2729,7 @@ $.fn.dropdown = function(parameters) {
2696
2729
module . clear ( ) ;
2697
2730
module . set . selected ( value , $selectedItem ) ;
2698
2731
} ,
2699
- selected : function ( value , $selectedItem , preventChangeTrigger ) {
2732
+ selected : function ( value , $selectedItem , preventChangeTrigger , keepSearchTerm ) {
2700
2733
var
2701
2734
isMultiple = module . is . multiple ( )
2702
2735
;
@@ -2758,7 +2791,9 @@ $.fn.dropdown = function(parameters) {
2758
2791
if ( settings . apiSettings && settings . saveRemoteData ) {
2759
2792
module . save . remoteData ( selectedText , selectedValue ) ;
2760
2793
}
2761
- module . set . text ( selectedText ) ;
2794
+ if ( ! keepSearchTerm ) {
2795
+ module . set . text ( selectedText ) ;
2796
+ }
2762
2797
module . set . value ( selectedValue , selectedText , $selected , preventChangeTrigger ) ;
2763
2798
$selected
2764
2799
. addClass ( className . active )
@@ -2767,7 +2802,9 @@ $.fn.dropdown = function(parameters) {
2767
2802
}
2768
2803
} )
2769
2804
;
2770
- module . remove . searchTerm ( ) ;
2805
+ if ( ! keepSearchTerm ) {
2806
+ module . remove . searchTerm ( ) ;
2807
+ }
2771
2808
}
2772
2809
} ,
2773
2810
@@ -3386,6 +3423,9 @@ $.fn.dropdown = function(parameters) {
3386
3423
remote : function ( ) {
3387
3424
return settings . apiSettings && module . can . useAPI ( ) ;
3388
3425
} ,
3426
+ noApiCache : function ( ) {
3427
+ return settings . apiSettings && ! settings . apiSettings . cache
3428
+ } ,
3389
3429
single : function ( ) {
3390
3430
return ! module . is . multiple ( ) ;
3391
3431
} ,
0 commit comments