Skip to content

Commit 393ca4c

Browse files
committed
Fix selectOnBlur and closeOnSelect combination
This fixes an infinite loop that used to be caused when both `closeOnSelect` and `selectOnClose` used to be combined, because they both were listening to events triggered by the other one. The problem was that `selectOnClose` was triggering `select` events for data objects which had already been selected. This problem was solved by checking if the data object was already selected before trying to select it again. This closes select2#3751. This closes select2#3169.
1 parent d504700 commit 393ca4c

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

src/js/select2/core.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ define([
357357
'select': 'selecting',
358358
'unselect': 'unselecting'
359359
};
360-
360+
361361
if (args === undefined) {
362362
args = {};
363363
}

src/js/select2/dropdown/selectOnClose.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,23 @@ define([
1616
SelectOnClose.prototype._handleSelectOnClose = function () {
1717
var $highlightedResults = this.getHighlightedResults();
1818

19+
// Only select highlighted results
1920
if ($highlightedResults.length < 1) {
2021
return;
2122
}
2223

24+
var data = $highlightedResults.data('data');
25+
26+
// Don't re-select already selected resulte
27+
if (
28+
(data.element != null && data.element.selected) ||
29+
(data.element == null && data.selected)
30+
) {
31+
return;
32+
}
33+
2334
this.trigger('select', {
24-
data: $highlightedResults.data('data')
35+
data: data
2536
});
2637
};
2738

0 commit comments

Comments
 (0)