1
0
mirror of synced 2024-11-30 00:26:03 +03:00

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:
Amanda Myer 2013-01-24 08:59:09 -05:00
parent 660c402737
commit 20950e0f0c

View File

@ -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;