diff --git a/select2.js b/select2.js index 7c918e99..044bf1e8 100644 --- a/select2.js +++ b/select2.js @@ -2966,21 +2966,18 @@ the specific language governing permissions and limitations under the Apache Lic // multi updateSelection: function (data) { - var ids = [], filtered = [], self = this; + var ids = {}, filtered = [], self = this; // filter out duplicates $(data).each(function () { - if (indexOf(self.id(this), ids) < 0) { - ids.push(self.id(this)); + if (!(self.id(this) in ids)) { + ids[self.id(this)] = 0; filtered.push(this); } }); - data = filtered; this.selection.find(".select2-search-choice").remove(); - $(data).each(function () { - self.addSelectedChoice(this); - }); + this.addSelectedChoice(filtered); self.postprocessResults(); }, @@ -3054,6 +3051,14 @@ the specific language governing permissions and limitations under the Apache Lic }, addSelectedChoice: function (data) { + var val = this.getVal(), self = this; + $(data).each(function () { + val.push(self.createChoice(this)); + }); + this.setVal(val); + }, + + createChoice: function (data) { var enableChoice = !data.locked, enabledItem = $( "
  • " + @@ -3066,7 +3071,6 @@ the specific language governing permissions and limitations under the Apache Lic "
  • "); var choice = enableChoice ? enabledItem : disabledItem, id = this.id(data), - val = this.getVal(), formatted, cssClass; @@ -3100,8 +3104,7 @@ the specific language governing permissions and limitations under the Apache Lic choice.data("select2-data", data); choice.insertBefore(this.searchContainer); - val.push(id); - this.setVal(val); + return id; }, // multi @@ -3233,14 +3236,16 @@ the specific language governing permissions and limitations under the Apache Lic // multi setVal: function (val) { - var unique; if (this.select) { this.select.val(val); } else { - unique = []; + var unique = [], valMap = {}; // filter out duplicates $(val).each(function () { - if (indexOf(this, unique) < 0) unique.push(this); + if (!(this in valMap)) { + unique.push(this); + valMap[this] = 0; + } }); this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator)); }