Update select2.js
Fixed issues with select2 and disabled options, most of it having to do with incorrectly determining the index of an option when disabled options were being displayed.
This commit is contained in:
parent
660c402737
commit
20950e0f0c
22
select2.js
22
select2.js
@ -633,7 +633,7 @@ the specific language governing permissions and limitations under the Apache Lic
|
|||||||
search.bind("blur", function () { search.removeClass("select2-focused");});
|
search.bind("blur", function () { search.removeClass("select2-focused");});
|
||||||
|
|
||||||
this.dropdown.delegate(resultsSelector, "mouseup", this.bind(function (e) {
|
this.dropdown.delegate(resultsSelector, "mouseup", this.bind(function (e) {
|
||||||
if ($(e.target).closest(".select2-result-selectable:not(.select2-disabled)").length > 0) {
|
if ($(e.target).closest(".select2-result-selectable:visible").length > 0) {
|
||||||
this.highlightUnderEvent(e);
|
this.highlightUnderEvent(e);
|
||||||
this.selectHighlighted(e);
|
this.selectHighlighted(e);
|
||||||
} else {
|
} else {
|
||||||
@ -1079,7 +1079,7 @@ the specific language governing permissions and limitations under the Apache Lic
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
children = results.find(".select2-result-selectable");
|
children = results.find(".select2-result:visible");
|
||||||
|
|
||||||
child = $(children[index]);
|
child = $(children[index]);
|
||||||
|
|
||||||
@ -1107,13 +1107,13 @@ the specific language governing permissions and limitations under the Apache Lic
|
|||||||
|
|
||||||
// abstract
|
// abstract
|
||||||
moveHighlight: function (delta) {
|
moveHighlight: function (delta) {
|
||||||
var choices = this.results.find(".select2-result-selectable"),
|
var choices = this.results.find(".select2-result:visible"),
|
||||||
index = this.highlight();
|
index = this.highlight();
|
||||||
|
|
||||||
while (index > -1 && index < choices.length) {
|
while (index > -1 && index < choices.length) {
|
||||||
index += delta;
|
index += delta;
|
||||||
var choice = $(choices[index]);
|
var choice = $(choices[index]);
|
||||||
if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled")) {
|
if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) {
|
||||||
this.highlight(index);
|
this.highlight(index);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1122,7 +1122,7 @@ the specific language governing permissions and limitations under the Apache Lic
|
|||||||
|
|
||||||
// abstract
|
// abstract
|
||||||
highlight: function (index) {
|
highlight: function (index) {
|
||||||
var choices = this.results.find(".select2-result-selectable").not(".select2-disabled");
|
var choices = this.results.find(".select2-result:visible");
|
||||||
|
|
||||||
if (arguments.length === 0) {
|
if (arguments.length === 0) {
|
||||||
return indexOf(choices.filter(".select2-highlighted")[0], choices.get());
|
return indexOf(choices.filter(".select2-highlighted")[0], choices.get());
|
||||||
@ -1140,14 +1140,14 @@ the specific language governing permissions and limitations under the Apache Lic
|
|||||||
|
|
||||||
// abstract
|
// abstract
|
||||||
countSelectableResults: function() {
|
countSelectableResults: function() {
|
||||||
return this.results.find(".select2-result-selectable").not(".select2-disabled").length;
|
return this.results.find(".select2-result-selectable").not(".select2-disabled").not(".select2-selected").length;
|
||||||
},
|
},
|
||||||
|
|
||||||
// abstract
|
// abstract
|
||||||
highlightUnderEvent: function (event) {
|
highlightUnderEvent: function (event) {
|
||||||
var el = $(event.target).closest(".select2-result-selectable");
|
var el = $(event.target).closest(".select2-result-selectable");
|
||||||
if (el.length > 0 && !el.is(".select2-highlighted")) {
|
if (el.length > 0 && !el.is(".select2-highlighted")) {
|
||||||
var choices = this.results.find('.select2-result-selectable');
|
var choices = this.results.find('.select2-result');
|
||||||
this.highlight(choices.index(el));
|
this.highlight(choices.index(el));
|
||||||
} else if (el.length == 0) {
|
} else if (el.length == 0) {
|
||||||
// if we are over an unselectable item remove al highlights
|
// if we are over an unselectable item remove al highlights
|
||||||
@ -1350,10 +1350,10 @@ the specific language governing permissions and limitations under the Apache Lic
|
|||||||
// abstract
|
// abstract
|
||||||
selectHighlighted: function (options) {
|
selectHighlighted: function (options) {
|
||||||
var index=this.highlight(),
|
var index=this.highlight(),
|
||||||
highlighted=this.results.find(".select2-highlighted").not(".select2-disabled"),
|
highlighted=this.results.find(".select2-highlighted:visible"),
|
||||||
data = highlighted.closest('.select2-result-selectable').data("select2-data");
|
data = highlighted.closest('.select2-result:visible').data("select2-data");
|
||||||
if (data) {
|
if (data) {
|
||||||
highlighted.addClass("select2-disabled");
|
highlighted.addClass("select2-selected");
|
||||||
this.highlight(index);
|
this.highlight(index);
|
||||||
this.onSelect(data, options);
|
this.onSelect(data, options);
|
||||||
}
|
}
|
||||||
@ -1698,7 +1698,7 @@ the specific language governing permissions and limitations under the Apache Lic
|
|||||||
|
|
||||||
// find the selected element in the result list
|
// find the selected element in the result list
|
||||||
|
|
||||||
this.results.find(".select2-result-selectable").each2(function (i, elm) {
|
this.results.find(".select2-result:visible").each2(function (i, elm) {
|
||||||
if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
|
if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
|
||||||
selected = i;
|
selected = i;
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user