1
0
mirror of synced 2024-11-23 05:26:10 +03:00

do not close the dropdown on resize or scroll, instead keep it positioned. fixes #753 #669 #719

This commit is contained in:
Igor Vaynberg 2013-01-30 21:49:57 -08:00
parent d0410144ba
commit c270d3e4a3

View File

@ -150,6 +150,25 @@ the specific language governing permissions and limitations under the Apache Lic
}); });
} }
$(window).bind("resize", function(e) {
var dropdown=$("#select2-drop");
if (dropdown.length>0) {
// there is an open dropdown
// adjust dropdown positioning so it sizes with the content
dropdown.data("select2").positionDropdown();
}
}).delegate("*", "scroll", function(e) {
var dropdown=$("#select2-drop");
if (dropdown.length>0) {
// there is an open dropdown
// adjust dropdown positioning so it scrolls with the content
dropdown.data("select2").positionDropdown();
}
});
$document.bind("mousemove", function (e) { $document.bind("mousemove", function (e) {
lastMousePosition = {x: e.pageX, y: e.pageY}; lastMousePosition = {x: e.pageX, y: e.pageY};
}); });
@ -236,6 +255,7 @@ the specific language governing permissions and limitations under the Apache Lic
textTransform: style.textTransform, textTransform: style.textTransform,
whiteSpace: "nowrap" whiteSpace: "nowrap"
}); });
sizer.attr("class","select2-sizer");
$("body").append(sizer); $("body").append(sizer);
} }
sizer.text(e.val()); sizer.text(e.val());
@ -966,31 +986,7 @@ the specific language governing permissions and limitations under the Apache Lic
*/ */
// abstract // abstract
opening: function() { opening: function() {
var cid = this.containerId, selector = this.containerSelector, var cid = this.containerId, selector = this.containerSelector;
scroll = "scroll." + cid, resize = "resize." + cid;
this.container.parents().each(function() {
$(this).bind(scroll, function() {
var s2 = $(selector);
if (s2.length == 0) {
$(this).unbind(scroll);
}
s2.select2("close");
});
});
window.setTimeout(function() {
// this is done inside a timeout because IE will sometimes fire a resize event while opening
// the dropdown and that causes this handler to immediately close it. this way the dropdown
// has a chance to fully open before we start listening to resize events
$(window).bind(resize, function() {
var s2 = $(selector);
if (s2.length == 0) {
$(window).unbind(resize);
}
s2.select2("close");
})
}, 10);
this.clearDropdownAlignmentPreference(); this.clearDropdownAlignmentPreference();
@ -1004,13 +1000,16 @@ the specific language governing permissions and limitations under the Apache Lic
this.dropdown.detach().appendTo(this.body()); this.dropdown.detach().appendTo(this.body());
} }
// move the global id to the correct dropdown
$("#select2-drop").removeAttr("id");
this.dropdown.attr("id", "select2-drop");
// show the elements
this.dropdown.show(); this.dropdown.show();
this.positionDropdown(); this.positionDropdown();
this.dropdown.addClass("select2-drop-active"); this.dropdown.addClass("select2-drop-active");
this.ensureHighlightVisible(); this.ensureHighlightVisible();
this.focusSearch(); this.focusSearch();
}, },
@ -1020,13 +1019,9 @@ the specific language governing permissions and limitations under the Apache Lic
var self = this; var self = this;
this.container.parents().each(function() {
$(this).unbind("scroll." + self.containerId);
});
$(window).unbind("resize." + this.containerId);
this.clearDropdownAlignmentPreference(); this.clearDropdownAlignmentPreference();
this.dropdown.removeAttr("id"); // only the active dropdown has the select2-drop id
this.dropdown.hide(); this.dropdown.hide();
this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"); this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active");
this.results.empty(); this.results.empty();