Skip to content

Commit

Permalink
Reposition dropdown whenever items are selected (#5590)
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
kevin-brown committed Jul 28, 2019
1 parent efbfd14 commit 525f661
Showing 1 changed file with 20 additions and 16 deletions.
36 changes: 20 additions & 16 deletions src/js/select2/dropdown/attachBody.js
Expand Up @@ -11,34 +11,38 @@ 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 () {
self._hideDropdown();
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();
});
Expand Down

0 comments on commit 525f661

Please sign in to comment.