Skip to content

Commit 9d359c9

Browse files
committed
Update the selected property on objects
This fixes the results display so they prefer the `selected` property on objects over checking if the `id` matches the value of the underlying select. We only ignore the `selected` property if it is null, at that point we compare against the `id` property. This closes select2#3163.
1 parent a699999 commit 9d359c9

6 files changed

Lines changed: 26 additions & 11 deletions

File tree

dist/js/select2.full.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,8 @@ S2.define('select2/results',[
828828
// id needs to be converted to a string when comparing
829829
var id = '' + item.id;
830830

831-
if ($.inArray(id, selectedIds) > -1) {
831+
if (item.selected ||
832+
(item.selected == null && $.inArray(id, selectedIds) > -1)) {
832833
$option.attr('aria-selected', 'true');
833834
} else {
834835
$option.attr('aria-selected', 'false');
@@ -2865,7 +2866,9 @@ S2.define('select2/data/select',[
28652866
SelectAdapter.prototype.select = function (data) {
28662867
var self = this;
28672868

2868-
// If data.element is a DOM nose, use it instead
2869+
data.selected = true;
2870+
2871+
// If data.element is a DOM node, use it instead
28692872
if ($(data.element).is('option')) {
28702873
data.element.selected = true;
28712874

@@ -2907,6 +2910,8 @@ S2.define('select2/data/select',[
29072910
return;
29082911
}
29092912

2913+
data.selected = false;
2914+
29102915
if ($(data.element).is('option')) {
29112916
data.element.selected = false;
29122917

dist/js/select2.full.min.js

Lines changed: 3 additions & 3 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: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,8 @@ S2.define('select2/results',[
828828
// id needs to be converted to a string when comparing
829829
var id = '' + item.id;
830830

831-
if ($.inArray(id, selectedIds) > -1) {
831+
if (item.selected ||
832+
(item.selected == null && $.inArray(id, selectedIds) > -1)) {
832833
$option.attr('aria-selected', 'true');
833834
} else {
834835
$option.attr('aria-selected', 'false');
@@ -2865,7 +2866,9 @@ S2.define('select2/data/select',[
28652866
SelectAdapter.prototype.select = function (data) {
28662867
var self = this;
28672868

2868-
// If data.element is a DOM nose, use it instead
2869+
data.selected = true;
2870+
2871+
// If data.element is a DOM node, use it instead
28692872
if ($(data.element).is('option')) {
28702873
data.element.selected = true;
28712874

@@ -2907,6 +2910,8 @@ S2.define('select2/data/select',[
29072910
return;
29082911
}
29092912

2913+
data.selected = false;
2914+
29102915
if ($(data.element).is('option')) {
29112916
data.element.selected = false;
29122917

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/data/select.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ define([
3030
SelectAdapter.prototype.select = function (data) {
3131
var self = this;
3232

33-
// If data.element is a DOM nose, use it instead
33+
data.selected = true;
34+
35+
// If data.element is a DOM node, use it instead
3436
if ($(data.element).is('option')) {
3537
data.element.selected = true;
3638

@@ -72,6 +74,8 @@ define([
7274
return;
7375
}
7476

77+
data.selected = false;
78+
7579
if ($(data.element).is('option')) {
7680
data.element.selected = false;
7781

src/js/select2/results.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ define([
109109
// id needs to be converted to a string when comparing
110110
var id = '' + item.id;
111111

112-
if ($.inArray(id, selectedIds) > -1) {
112+
if (item.selected ||
113+
(item.selected == null && $.inArray(id, selectedIds) > -1)) {
113114
$option.attr('aria-selected', 'true');
114115
} else {
115116
$option.attr('aria-selected', 'false');

0 commit comments

Comments
 (0)