Skip to content

Commit 7f369f6

Browse files
committed
use native JS for val method instead of jQuery. let val work when options are set via data property. have setSelected automatically update the selected property for options (#899)
1 parent 5e4d565 commit 7f369f6

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

js/bootstrap-select.js

+32-14
Original file line numberDiff line numberDiff line change
@@ -2386,7 +2386,10 @@
23862386

23872387
if (!li) return;
23882388

2389-
if (selected !== undefined) liData.selected = selected;
2389+
if (selected !== undefined) {
2390+
liData.selected = selected;
2391+
if (liData.option) liData.option.selected = selected;
2392+
}
23902393

23912394
if (selected && this.options.data) {
23922395
this.createOption(liData, false);
@@ -2504,12 +2507,9 @@
25042507
prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false;
25052508

25062509
if (prevData) {
2507-
prevData.selected = false;
2508-
if (prevData.source) prevData.source.selected = false;
2510+
that.setSelected(prevData, false);
25092511
}
25102512

2511-
if (prevOption) prevOption.selected = false;
2512-
25132513
element.selectedIndex = 0;
25142514

25152515
that.render();
@@ -2621,13 +2621,9 @@
26212621
}
26222622

26232623
if (!that.multiple) { // Deselect previous option if not multi select
2624-
if (prevData) prevData.selected = false;
2625-
if (prevOption) prevOption.selected = false;
2626-
option.selected = true;
2624+
if (prevData) that.setSelected(prevData, false);
26272625
that.setSelected(clickedData, true);
26282626
} else { // Toggle the clicked option if multi select.
2629-
option.selected = !state;
2630-
26312627
that.setSelected(clickedData, !state);
26322628
$this.trigger('blur');
26332629

@@ -2877,13 +2873,35 @@
28772873
var element = this.$element[0];
28782874

28792875
if (typeof value !== 'undefined') {
2880-
var prevValue = getSelectValues.call(this);
2876+
var selectedOptions = getSelectedOptions.call(this),
2877+
prevValue = getSelectValues.call(this, selectedOptions);
28812878

28822879
changedArguments = [null, null, prevValue];
28832880

2884-
this.$element
2885-
.val(value)
2886-
.trigger('changed' + EVENT_KEY, changedArguments);
2881+
if (!Array.isArray(value)) value = [ value ];
2882+
2883+
value.map(String);
2884+
2885+
for (var i = 0; i < selectedOptions.length; i++) {
2886+
var item = selectedOptions[i];
2887+
2888+
if (item && value.indexOf(String(item.value)) === -1) {
2889+
this.setSelected(item, false);
2890+
}
2891+
}
2892+
2893+
this.selectpicker.main.data.filter(function (item) {
2894+
if (value.indexOf(String(item.value)) !== -1) {
2895+
this.setSelected(item, true);
2896+
return true;
2897+
}
2898+
2899+
return false;
2900+
}, this);
2901+
2902+
if (this.options.data) element.appendChild(this.selectpicker.main.optionQueue);
2903+
2904+
this.$element.trigger('changed' + EVENT_KEY, changedArguments);
28872905

28882906
if (this.$newElement.hasClass(classNames.SHOW)) {
28892907
if (this.multiple) {

0 commit comments

Comments
 (0)