From 84cf134a4e889e5ac85641bb2ac732b015911174 Mon Sep 17 00:00:00 2001 From: jdecuyper Date: Sun, 19 Jan 2014 21:12:39 -0600 Subject: [PATCH] Add hideSelectionFromResult function --- select2.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/select2.js b/select2.js index 14f6c620..2d3f631d 100644 --- a/select2.js +++ b/select2.js @@ -2257,13 +2257,14 @@ the specific language governing permissions and limitations under the Apache Lic // single postprocessResults: function (data, initial, noHighlightUpdate) { - var selected = 0, self = this, showSearchInput = true; + var selected = 0, selectedElm = null, self = this, showSearchInput = true; // find the selected element in the result list this.findHighlightableChoices().each2(function (i, elm) { if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) { selected = i; + selectedElm = elm; return false; } }); @@ -2271,7 +2272,14 @@ the specific language governing permissions and limitations under the Apache Lic // and highlight it if (noHighlightUpdate !== false) { if (initial === true && selected >= 0) { - this.highlight(selected); + // By default, the selected item is displayed inside the result list from a single select + // User can provide an implementation for 'hideSelectionFromResult' and hide it + if(this.opts.hideSelectionFromResult !== undefined && selectedElm !== null) { + if(this.opts.hideSelectionFromResult(selectedElm)) + selectedElm.addClass("select2-selected"); + } + else + this.highlight(selected); } else { this.highlight(0); } @@ -2995,9 +3003,14 @@ the specific language governing permissions and limitations under the Apache Lic choices.each2(function (i, choice) { var id = self.id(choice.data("select2-data")); if (indexOf(id, val) >= 0) { - choice.addClass("select2-selected"); - // mark all children of the selected parent as selected - choice.find(".select2-result-selectable").addClass("select2-selected"); + // By default, the selected item is hidden from the result list inside a multi select + // User can provide an implementation for 'hideSelectionFromResult' and allow the same + // element to be selected multiple times. + if(self.opts.hideSelectionFromResult === undefined || self.opts.hideSelectionFromResult(choice)) { + choice.addClass("select2-selected"); + // mark all children of the selected parent as selected + choice.find(".select2-result-selectable").addClass("select2-selected"); + } } }); @@ -3313,7 +3326,8 @@ the specific language governing permissions and limitations under the Apache Lic selectOnBlur: false, adaptContainerCssClass: function(c) { return c; }, adaptDropdownCssClass: function(c) { return null; }, - nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; } + nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; }, + hideSelectionFromResult: function(selectedObject) { return undefined; } }; $.fn.select2.ajaxDefaults = {