From 1afffb09dc7b8fa539a26afcdf4333589b856a5b Mon Sep 17 00:00:00 2001 From: Igor Vaynberg Date: Mon, 26 Mar 2012 14:08:06 -0700 Subject: [PATCH] improved blur tracking. closes #2 --- select2.js | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/select2.js b/select2.js index cc162fa8..1ba0f7c6 100755 --- a/select2.js +++ b/select2.js @@ -20,9 +20,7 @@ "use strict"; /*global document, window, jQuery, console */ - var uid = 0, KEY; - - KEY = { + var KEY = { TAB: 9, ENTER: 13, ESC: 27, @@ -144,6 +142,18 @@ return width; } + /** + * blurs any Select2 container that has focus when an element outside them was clicked or received focus + */ + $(document).ready(function () { + $(document).on("mousedown focusin", function (e) { + var target = $(e.target).closest("div.select2-container").get(0); + $(document).find("div.select2-container-active").each(function () { + if (this !== target) $(this).data("select2").blur(); + }); + }); + }); + /** * * @param opts @@ -161,9 +171,6 @@ AbstractSelect2.prototype.init = function (opts) { var results, search; - this.uid = uid; - uid = uid + 1; - // prepare options this.opts = this.prepareOpts(opts); @@ -333,13 +340,6 @@ this.alignDropdown(); this.dropdown.show(); - - // register click-outside-closes-dropdown listener - $(document).on("click.id" + this.uid, this.bind(function (e) { - if ($(e.target).closest(this.container).length === 0) { - this.blur(); - } - })); }; AbstractSelect2.prototype.close = function () { @@ -347,7 +347,6 @@ this.dropdown.hide(); this.container.removeClass("select2-dropdown-open"); - $(document).off("click.id" + this.uid); if (this.select) { // TODO see if we can always clear here and reset on open @@ -439,7 +438,7 @@ more = results.find("li.select2-more-results"), below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible offset = -1, // index of first element without data - page = this.resultsPage+1; + page = this.resultsPage + 1; if (more.length === 0) return; @@ -835,11 +834,6 @@ } } - if (e.which === KEY.TAB) { - this.blur(); - return; - } - if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.BACKSPACE || e.which === KEY.ESC) { return; }