Commit 9abf0138 authored by David Stutz's avatar David Stutz

Merge pull request #553 from melgish/refresh-performance

Fixed #548. Updated refresh to improve performance with large lists.
parents 6367ced0 b676e5e3
...@@ -935,30 +935,35 @@ ...@@ -935,30 +935,35 @@
/** /**
* Refreshs the multiselect based on the selected options of the select. * Refreshs the multiselect based on the selected options of the select.
*/ */
refresh: function() { refresh: function () {
$('option', this.$select).each($.proxy(function(index, element) { var inputs = $.map($('li input', this.$ul), $);
var $input = $('li input', this.$ul).filter(function() { var selectedClass = this.options.selectedClass;
return $(this).val() === $(element).val(); $('option', this.$select).each(function (index, element) {
}); var $elem = $(element);
var value = $elem.val();
if ($(element).is(':selected')) { var $input;
for (var i = inputs.length; 0 < i--; /**/) {
if (value !== ($input = inputs[i]).val())
continue; // wrong li
if ($elem.is(':selected')) {
$input.prop('checked', true); $input.prop('checked', true);
if (this.options.selectedClass) { if (selectedClass) {
$input.closest('li') $input.closest('li')
.addClass(this.options.selectedClass); .addClass(selectedClass);
} }
} }
else { else {
$input.prop('checked', false); $input.prop('checked', false);
if (this.options.selectedClass) { if (selectedClass) {
$input.closest('li') $input.closest('li')
.removeClass(this.options.selectedClass); .removeClass(selectedClass);
} }
} }
if ($(element).is(":disabled")) { if ($elem.is(":disabled")) {
$input.attr('disabled', 'disabled') $input.attr('disabled', 'disabled')
.prop('disabled', true) .prop('disabled', true)
.closest('li') .closest('li')
...@@ -969,7 +974,9 @@ ...@@ -969,7 +974,9 @@
.closest('li') .closest('li')
.removeClass('disabled'); .removeClass('disabled');
} }
}, this)); break; // assumes unique values
}
});
this.updateButtonText(); this.updateButtonText();
this.updateSelectAll(); this.updateSelectAll();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment