Ver Fonte

Merge pull request #5621 from select2/GH-5619

Fix bug where dropdowns pointing upwards were incorrectly positioned
Kevin Brown há 5 anos atrás
pai
commit
9e4f842fb1
1 ficheiros alterados com 41 adições e 25 exclusões
  1. 41 25
      src/js/select2/dropdown/attachBody.js

+ 41 - 25
src/js/select2/dropdown/attachBody.js

@@ -16,6 +16,9 @@ define([
     container.on('open', function () {
     container.on('open', function () {
       self._showDropdown();
       self._showDropdown();
       self._attachPositioningHandler(container);
       self._attachPositioningHandler(container);
+
+      // Must bind after the results handlers to ensure correct sizing
+      self._bindContainerResultHandlers(container);
     });
     });
 
 
     container.on('close', function () {
     container.on('close', function () {
@@ -23,31 +26,6 @@ define([
       self._detachPositioningHandler(container);
       self._detachPositioningHandler(container);
     });
     });
 
 
-    container.on('results:all', function () {
-      self._positionDropdown();
-      self._resizeDropdown();
-    });
-
-    container.on('results:append', function () {
-      self._positionDropdown();
-      self._resizeDropdown();
-    });
-
-    container.on('results:message', 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) {
     this.$dropdownContainer.on('mousedown', function (evt) {
       evt.stopPropagation();
       evt.stopPropagation();
     });
     });
@@ -89,6 +67,44 @@ define([
     this.$dropdownContainer.detach();
     this.$dropdownContainer.detach();
   };
   };
 
 
+  AttachBody.prototype._bindContainerResultHandlers =
+      function (decorated, container) {
+
+    // These should only be bound once
+    if (this._containerResultsHandlersBound) {
+      return;
+    }
+
+    var self = this;
+
+    container.on('results:all', function () {
+      self._positionDropdown();
+      self._resizeDropdown();
+    });
+
+    container.on('results:append', function () {
+      self._positionDropdown();
+      self._resizeDropdown();
+    });
+
+    container.on('results:message', function () {
+      self._positionDropdown();
+      self._resizeDropdown();
+    });
+
+    container.on('select', function () {
+      self._positionDropdown();
+      self._resizeDropdown();
+    });
+
+    container.on('unselect', function () {
+      self._positionDropdown();
+      self._resizeDropdown();
+    });
+
+    this._containerResultsHandlersBound = true;
+  };
+
   AttachBody.prototype._attachPositioningHandler =
   AttachBody.prototype._attachPositioningHandler =
       function (decorated, container) {
       function (decorated, container) {
     var self = this;
     var self = this;