Skip to content

Commit fb5e114

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 8eb53ee commit fb5e114

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
@@ -2398,7 +2398,10 @@
23982398

23992399
if (!li) return;
24002400

2401-
if (selected !== undefined) liData.selected = selected;
2401+
if (selected !== undefined) {
2402+
liData.selected = selected;
2403+
if (liData.option) liData.option.selected = selected;
2404+
}
24022405

24032406
if (selected && this.options.data) {
24042407
this.createOption(liData, false);
@@ -2516,12 +2519,9 @@
25162519
prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false;
25172520

25182521
if (prevData) {
2519-
prevData.selected = false;
2520-
if (prevData.source) prevData.source.selected = false;
2522+
that.setSelected(prevData, false);
25212523
}
25222524

2523-
if (prevOption) prevOption.selected = false;
2524-
25252525
element.selectedIndex = 0;
25262526

25272527
that.render();
@@ -2633,13 +2633,9 @@
26332633
}
26342634

26352635
if (!that.multiple) { // Deselect previous option if not multi select
2636-
if (prevData) prevData.selected = false;
2637-
if (prevOption) prevOption.selected = false;
2638-
option.selected = true;
2636+
if (prevData) that.setSelected(prevData, false);
26392637
that.setSelected(clickedData, true);
26402638
} else { // Toggle the clicked option if multi select.
2641-
option.selected = !state;
2642-
26432639
that.setSelected(clickedData, !state);
26442640
that.focusedParent.focus();
26452641

@@ -2892,13 +2888,35 @@
28922888
var element = this.$element[0];
28932889

28942890
if (typeof value !== 'undefined') {
2895-
var prevValue = getSelectValues.call(this);
2891+
var selectedOptions = getSelectedOptions.call(this),
2892+
prevValue = getSelectValues.call(this, selectedOptions);
28962893

28972894
changedArguments = [null, null, prevValue];
28982895

2899-
this.$element
2900-
.val(value)
2901-
.trigger('changed' + EVENT_KEY, changedArguments);
2896+
if (!Array.isArray(value)) value = [ value ];
2897+
2898+
value.map(String);
2899+
2900+
for (var i = 0; i < selectedOptions.length; i++) {
2901+
var item = selectedOptions[i];
2902+
2903+
if (item && value.indexOf(String(item.value)) === -1) {
2904+
this.setSelected(item, false);
2905+
}
2906+
}
2907+
2908+
this.selectpicker.main.data.filter(function (item) {
2909+
if (value.indexOf(String(item.value)) !== -1) {
2910+
this.setSelected(item, true);
2911+
return true;
2912+
}
2913+
2914+
return false;
2915+
}, this);
2916+
2917+
if (this.options.data) element.appendChild(this.selectpicker.main.optionQueue);
2918+
2919+
this.$element.trigger('changed' + EVENT_KEY, changedArguments);
29022920

29032921
if (this.$newElement.hasClass(classNames.SHOW)) {
29042922
if (this.multiple) {

0 commit comments

Comments
 (0)