소스 검색

selectOnClose now properly works with closeOnSelect

Previously we hacked around the infinite loop between closeOnSelect and
selectOnClose by attempting to detect what event was being triggered
without knowing what event triggered it. Now we properly relay the
Select2 event and the jQuery event that triggered the select or unselect

This closes https://github.com/select2/select2/issues/4012
Kevin Brown 9 년 전
부모
커밋
481c43883e
2개의 변경된 파일17개의 추가작업 그리고 4개의 파일을 삭제
  1. 4 1
      src/js/select2/dropdown/closeOnSelect.js
  2. 13 3
      src/js/select2/dropdown/selectOnClose.js

+ 4 - 1
src/js/select2/dropdown/closeOnSelect.js

@@ -25,7 +25,10 @@ define([
       return;
     }
 
-    this.trigger('close', {});
+    this.trigger('close', {
+      originalEvent: originalEvent,
+      originalSelect2Event: evt
+    });
   };
 
   return CloseOnSelect;

+ 13 - 3
src/js/select2/dropdown/selectOnClose.js

@@ -8,12 +8,22 @@ define([
 
     decorated.call(this, container, $container);
 
-    container.on('close', function () {
-      self._handleSelectOnClose();
+    container.on('close', function (params) {
+      self._handleSelectOnClose(params);
     });
   };
 
-  SelectOnClose.prototype._handleSelectOnClose = function () {
+  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
+    if (params && params.originalSelect2Event != null) {
+      var event = params.originalSelect2Event;
+
+      // Don't select an item if the close event was triggered from a select or
+      // unselect event
+      if (event._type === 'select' || event._type === 'unselect') {
+        return;
+      }
+    }
+
     var $highlightedResults = this.getHighlightedResults();
 
     // Only select highlighted results