Skip to content

Commit 981c406

Browse files
committed
Only trigger unselect for multiple
This fixes an issue where an `unselect` event would be incorrectly triggered when the selected option was selected again in a single select. This has been fixed now, so the even will only be triggered for multiple selects. The `close` event will still be triggered though, so the functionality will still remain the same to the user. This closes select2#2959.
1 parent bca4e1f commit 981c406

7 files changed

Lines changed: 107 additions & 39 deletions

File tree

dist/js/select2.amd.full.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,13 @@ define('select2/results',[
479479
var data = $highlighted.data('data');
480480

481481
if ($highlighted.attr('aria-selected') == 'true') {
482-
self.trigger('unselect', {
483-
data: data
484-
});
482+
if (self.options.get('multiple')) {
483+
self.trigger('unselect', {
484+
data: data
485+
});
486+
} else {
487+
self.trigger('close');
488+
}
485489
} else {
486490
self.trigger('select', {
487491
data: data
@@ -597,10 +601,14 @@ define('select2/results',[
597601
var data = $this.data('data');
598602

599603
if ($this.attr('aria-selected') === 'true') {
600-
self.trigger('unselect', {
601-
originalEvent: evt,
602-
data: data
603-
});
604+
if (self.options.get('multiple')) {
605+
self.trigger('unselect', {
606+
originalEvent: evt,
607+
data: data
608+
});
609+
} else {
610+
self.trigger('close');
611+
}
604612

605613
return;
606614
}
@@ -3632,6 +3640,13 @@ define('select2/defaults',[
36323640
HidePlaceholder
36333641
);
36343642
}
3643+
3644+
if (options.selectOnClose) {
3645+
options.resultsAdapter = Utils.Decorate(
3646+
options.resultsAdapter,
3647+
SelectOnClose
3648+
);
3649+
}
36353650
}
36363651

36373652
if (options.dropdownAdapter == null) {

dist/js/select2.amd.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,13 @@ define('select2/results',[
479479
var data = $highlighted.data('data');
480480

481481
if ($highlighted.attr('aria-selected') == 'true') {
482-
self.trigger('unselect', {
483-
data: data
484-
});
482+
if (self.options.get('multiple')) {
483+
self.trigger('unselect', {
484+
data: data
485+
});
486+
} else {
487+
self.trigger('close');
488+
}
485489
} else {
486490
self.trigger('select', {
487491
data: data
@@ -597,10 +601,14 @@ define('select2/results',[
597601
var data = $this.data('data');
598602

599603
if ($this.attr('aria-selected') === 'true') {
600-
self.trigger('unselect', {
601-
originalEvent: evt,
602-
data: data
603-
});
604+
if (self.options.get('multiple')) {
605+
self.trigger('unselect', {
606+
originalEvent: evt,
607+
data: data
608+
});
609+
} else {
610+
self.trigger('close');
611+
}
604612

605613
return;
606614
}
@@ -3632,6 +3640,13 @@ define('select2/defaults',[
36323640
HidePlaceholder
36333641
);
36343642
}
3643+
3644+
if (options.selectOnClose) {
3645+
options.resultsAdapter = Utils.Decorate(
3646+
options.resultsAdapter,
3647+
SelectOnClose
3648+
);
3649+
}
36353650
}
36363651

36373652
if (options.dropdownAdapter == null) {

dist/js/select2.full.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -917,9 +917,13 @@ define('select2/results',[
917917
var data = $highlighted.data('data');
918918

919919
if ($highlighted.attr('aria-selected') == 'true') {
920-
self.trigger('unselect', {
921-
data: data
922-
});
920+
if (self.options.get('multiple')) {
921+
self.trigger('unselect', {
922+
data: data
923+
});
924+
} else {
925+
self.trigger('close');
926+
}
923927
} else {
924928
self.trigger('select', {
925929
data: data
@@ -1035,10 +1039,14 @@ define('select2/results',[
10351039
var data = $this.data('data');
10361040

10371041
if ($this.attr('aria-selected') === 'true') {
1038-
self.trigger('unselect', {
1039-
originalEvent: evt,
1040-
data: data
1041-
});
1042+
if (self.options.get('multiple')) {
1043+
self.trigger('unselect', {
1044+
originalEvent: evt,
1045+
data: data
1046+
});
1047+
} else {
1048+
self.trigger('close');
1049+
}
10421050

10431051
return;
10441052
}
@@ -4070,6 +4078,13 @@ define('select2/defaults',[
40704078
HidePlaceholder
40714079
);
40724080
}
4081+
4082+
if (options.selectOnClose) {
4083+
options.resultsAdapter = Utils.Decorate(
4084+
options.resultsAdapter,
4085+
SelectOnClose
4086+
);
4087+
}
40734088
}
40744089

40754090
if (options.dropdownAdapter == null) {

dist/js/select2.full.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/js/select2.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -917,9 +917,13 @@ define('select2/results',[
917917
var data = $highlighted.data('data');
918918

919919
if ($highlighted.attr('aria-selected') == 'true') {
920-
self.trigger('unselect', {
921-
data: data
922-
});
920+
if (self.options.get('multiple')) {
921+
self.trigger('unselect', {
922+
data: data
923+
});
924+
} else {
925+
self.trigger('close');
926+
}
923927
} else {
924928
self.trigger('select', {
925929
data: data
@@ -1035,10 +1039,14 @@ define('select2/results',[
10351039
var data = $this.data('data');
10361040

10371041
if ($this.attr('aria-selected') === 'true') {
1038-
self.trigger('unselect', {
1039-
originalEvent: evt,
1040-
data: data
1041-
});
1042+
if (self.options.get('multiple')) {
1043+
self.trigger('unselect', {
1044+
originalEvent: evt,
1045+
data: data
1046+
});
1047+
} else {
1048+
self.trigger('close');
1049+
}
10421050

10431051
return;
10441052
}
@@ -4070,6 +4078,13 @@ define('select2/defaults',[
40704078
HidePlaceholder
40714079
);
40724080
}
4081+
4082+
if (options.selectOnClose) {
4083+
options.resultsAdapter = Utils.Decorate(
4084+
options.resultsAdapter,
4085+
SelectOnClose
4086+
);
4087+
}
40734088
}
40744089

40754090
if (options.dropdownAdapter == null) {

dist/js/select2.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/js/select2/results.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,13 @@ define([
281281
var data = $highlighted.data('data');
282282

283283
if ($highlighted.attr('aria-selected') == 'true') {
284-
self.trigger('unselect', {
285-
data: data
286-
});
284+
if (self.options.get('multiple')) {
285+
self.trigger('unselect', {
286+
data: data
287+
});
288+
} else {
289+
self.trigger('close');
290+
}
287291
} else {
288292
self.trigger('select', {
289293
data: data
@@ -399,10 +403,14 @@ define([
399403
var data = $this.data('data');
400404

401405
if ($this.attr('aria-selected') === 'true') {
402-
self.trigger('unselect', {
403-
originalEvent: evt,
404-
data: data
405-
});
406+
if (self.options.get('multiple')) {
407+
self.trigger('unselect', {
408+
originalEvent: evt,
409+
data: data
410+
});
411+
} else {
412+
self.trigger('close');
413+
}
406414

407415
return;
408416
}

0 commit comments

Comments
 (0)