|
2386 | 2386 |
|
2387 | 2387 | if (!li) return;
|
2388 | 2388 |
|
2389 |
| - if (selected !== undefined) liData.selected = selected; |
| 2389 | + if (selected !== undefined) { |
| 2390 | + liData.selected = selected; |
| 2391 | + if (liData.option) liData.option.selected = selected; |
| 2392 | + } |
2390 | 2393 |
|
2391 | 2394 | if (selected && this.options.data) {
|
2392 | 2395 | this.createOption(liData, false);
|
|
2504 | 2507 | prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false;
|
2505 | 2508 |
|
2506 | 2509 | if (prevData) {
|
2507 |
| - prevData.selected = false; |
2508 |
| - if (prevData.source) prevData.source.selected = false; |
| 2510 | + that.setSelected(prevData, false); |
2509 | 2511 | }
|
2510 | 2512 |
|
2511 |
| - if (prevOption) prevOption.selected = false; |
2512 |
| - |
2513 | 2513 | element.selectedIndex = 0;
|
2514 | 2514 |
|
2515 | 2515 | that.render();
|
|
2621 | 2621 | }
|
2622 | 2622 |
|
2623 | 2623 | 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); |
2627 | 2625 | that.setSelected(clickedData, true);
|
2628 | 2626 | } else { // Toggle the clicked option if multi select.
|
2629 |
| - option.selected = !state; |
2630 |
| - |
2631 | 2627 | that.setSelected(clickedData, !state);
|
2632 | 2628 | $this.trigger('blur');
|
2633 | 2629 |
|
|
2877 | 2873 | var element = this.$element[0];
|
2878 | 2874 |
|
2879 | 2875 | if (typeof value !== 'undefined') {
|
2880 |
| - var prevValue = getSelectValues.call(this); |
| 2876 | + var selectedOptions = getSelectedOptions.call(this), |
| 2877 | + prevValue = getSelectValues.call(this, selectedOptions); |
2881 | 2878 |
|
2882 | 2879 | changedArguments = [null, null, prevValue];
|
2883 | 2880 |
|
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); |
2887 | 2905 |
|
2888 | 2906 | if (this.$newElement.hasClass(classNames.SHOW)) {
|
2889 | 2907 | if (this.multiple) {
|
|
0 commit comments