Reposition dropdown whenever items are selected (#5590)
* Reposition dropdown whenever items are selected This fixes an old bug where if you had a multiple select with the `closeOnSelect` option set to `false` and many options being selected, the dropdown would not reposition itself if the selected options expanded the container down another line. This was because the dropdown was only being repositioned when it was opened, closed, or if something around it was scrolled or resized. Unfortunately, in most cases none of these happened and the dropdown would start covering the selections. This was fixed by telling Select2 to resize the dropdown when new options are selected or existing options are unselected. Fixes #4377 * Attach positioning handlers at bind time The positioning handlers have been attached at the time that the dropdown is opened since when they were first committed many years ago. It's not actually clear why this was being done, since they don't rely on anything involving the dropdown being open. This removes the flag and process for setting these handlers only after the dropdown was opened for the first time, and moves these handlers to always be set at bind time.
This commit is contained in:
parent
efbfd14414
commit
525f661915
36
src/js/select2/dropdown/attachBody.js
vendored
36
src/js/select2/dropdown/attachBody.js
vendored
@ -11,27 +11,11 @@ define([
|
||||
AttachBody.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var setupResultsEvents = false;
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('open', function () {
|
||||
self._showDropdown();
|
||||
self._attachPositioningHandler(container);
|
||||
|
||||
if (!setupResultsEvents) {
|
||||
setupResultsEvents = true;
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@ -39,6 +23,26 @@ define([
|
||||
self._detachPositioningHandler(container);
|
||||
});
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('select', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('unselect', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
this.$dropdownContainer.on('mousedown', function (evt) {
|
||||
evt.stopPropagation();
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user