improved blur tracking. closes #2
This commit is contained in:
parent
f6eb1edbce
commit
1afffb09dc
34
select2.js
34
select2.js
@ -20,9 +20,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
/*global document, window, jQuery, console */
|
/*global document, window, jQuery, console */
|
||||||
|
|
||||||
var uid = 0, KEY;
|
var KEY = {
|
||||||
|
|
||||||
KEY = {
|
|
||||||
TAB: 9,
|
TAB: 9,
|
||||||
ENTER: 13,
|
ENTER: 13,
|
||||||
ESC: 27,
|
ESC: 27,
|
||||||
@ -144,6 +142,18 @@
|
|||||||
return width;
|
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
|
* @param opts
|
||||||
@ -161,9 +171,6 @@
|
|||||||
AbstractSelect2.prototype.init = function (opts) {
|
AbstractSelect2.prototype.init = function (opts) {
|
||||||
var results, search;
|
var results, search;
|
||||||
|
|
||||||
this.uid = uid;
|
|
||||||
uid = uid + 1;
|
|
||||||
|
|
||||||
// prepare options
|
// prepare options
|
||||||
this.opts = this.prepareOpts(opts);
|
this.opts = this.prepareOpts(opts);
|
||||||
|
|
||||||
@ -333,13 +340,6 @@
|
|||||||
|
|
||||||
this.alignDropdown();
|
this.alignDropdown();
|
||||||
this.dropdown.show();
|
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 () {
|
AbstractSelect2.prototype.close = function () {
|
||||||
@ -347,7 +347,6 @@
|
|||||||
|
|
||||||
this.dropdown.hide();
|
this.dropdown.hide();
|
||||||
this.container.removeClass("select2-dropdown-open");
|
this.container.removeClass("select2-dropdown-open");
|
||||||
$(document).off("click.id" + this.uid);
|
|
||||||
|
|
||||||
if (this.select) {
|
if (this.select) {
|
||||||
// TODO see if we can always clear here and reset on open
|
// TODO see if we can always clear here and reset on open
|
||||||
@ -439,7 +438,7 @@
|
|||||||
more = results.find("li.select2-more-results"),
|
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
|
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
|
offset = -1, // index of first element without data
|
||||||
page = this.resultsPage+1;
|
page = this.resultsPage + 1;
|
||||||
|
|
||||||
if (more.length === 0) return;
|
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) {
|
if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user