|
2398 | 2398 |
|
2399 | 2399 | if (!li) return;
|
2400 | 2400 |
|
2401 |
| - if (selected !== undefined) liData.selected = selected; |
| 2401 | + if (selected !== undefined) { |
| 2402 | + liData.selected = selected; |
| 2403 | + if (liData.option) liData.option.selected = selected; |
| 2404 | + } |
2402 | 2405 |
|
2403 | 2406 | if (selected && this.options.data) {
|
2404 | 2407 | this.createOption(liData, false);
|
|
2516 | 2519 | prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false;
|
2517 | 2520 |
|
2518 | 2521 | if (prevData) {
|
2519 |
| - prevData.selected = false; |
2520 |
| - if (prevData.source) prevData.source.selected = false; |
| 2522 | + that.setSelected(prevData, false); |
2521 | 2523 | }
|
2522 | 2524 |
|
2523 |
| - if (prevOption) prevOption.selected = false; |
2524 |
| - |
2525 | 2525 | element.selectedIndex = 0;
|
2526 | 2526 |
|
2527 | 2527 | that.render();
|
|
2633 | 2633 | }
|
2634 | 2634 |
|
2635 | 2635 | 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); |
2639 | 2637 | that.setSelected(clickedData, true);
|
2640 | 2638 | } else { // Toggle the clicked option if multi select.
|
2641 |
| - option.selected = !state; |
2642 |
| - |
2643 | 2639 | that.setSelected(clickedData, !state);
|
2644 | 2640 | that.focusedParent.focus();
|
2645 | 2641 |
|
|
2892 | 2888 | var element = this.$element[0];
|
2893 | 2889 |
|
2894 | 2890 | if (typeof value !== 'undefined') {
|
2895 |
| - var prevValue = getSelectValues.call(this); |
| 2891 | + var selectedOptions = getSelectedOptions.call(this), |
| 2892 | + prevValue = getSelectValues.call(this, selectedOptions); |
2896 | 2893 |
|
2897 | 2894 | changedArguments = [null, null, prevValue];
|
2898 | 2895 |
|
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); |
2902 | 2920 |
|
2903 | 2921 | if (this.$newElement.hasClass(classNames.SHOW)) {
|
2904 | 2922 | if (this.multiple) {
|
|
0 commit comments