소스 검색

Set up the click handler for closing

Now the dropdown will automatically be closed when the user clicks
outside of it.
Kevin Brown 10 년 전
부모
커밋
130358e8ae
7개의 변경된 파일114개의 추가작업 그리고 4개의 파일을 삭제
  1. 23 1
      dist/js/select2.amd.full.js
  2. 23 1
      dist/js/select2.amd.js
  3. 23 1
      dist/js/select2.full.js
  4. 0 0
      dist/js/select2.full.min.js
  5. 23 1
      dist/js/select2.js
  6. 0 0
      dist/js/select2.min.js
  7. 22 0
      src/js/select2/core.js

+ 23 - 1
dist/js/select2.amd.full.js

@@ -1669,7 +1669,7 @@ define('select2/core',[
     // Bind the container to all of the adapters
     this._bindAdapters();
 
-    // Register any DOM event handler
+    // Register any DOM event handlers
     this._registerDomEvents();
 
     // Register any internal event handlers
@@ -1746,6 +1746,26 @@ define('select2/core',[
   Select2.prototype._registerDomEvents = function () {
     var self = this;
 
+    $(document.body).on('mousedown', function (e) {
+      var $target = $(e.target);
+
+      var $select = $target.closest('.select2');
+
+      var $all = $('.select2.open');
+
+      $all.each(function () {
+        var $this = $(this);
+
+        if (this == $select[0]) {
+          return;
+        }
+
+        var $element = $this.data('element');
+
+        $element.select2('close');
+      });
+    });
+
     this.$element.on('change', function () {
       self.data.current(function (data) {
         self.trigger('selection:update', {
@@ -1864,6 +1884,8 @@ define('select2/core',[
 
     this.$container = $container;
 
+    $container.data('element', this.$element);
+
     return $container;
   };
 

+ 23 - 1
dist/js/select2.amd.js

@@ -1669,7 +1669,7 @@ define('select2/core',[
     // Bind the container to all of the adapters
     this._bindAdapters();
 
-    // Register any DOM event handler
+    // Register any DOM event handlers
     this._registerDomEvents();
 
     // Register any internal event handlers
@@ -1746,6 +1746,26 @@ define('select2/core',[
   Select2.prototype._registerDomEvents = function () {
     var self = this;
 
+    $(document.body).on('mousedown', function (e) {
+      var $target = $(e.target);
+
+      var $select = $target.closest('.select2');
+
+      var $all = $('.select2.open');
+
+      $all.each(function () {
+        var $this = $(this);
+
+        if (this == $select[0]) {
+          return;
+        }
+
+        var $element = $this.data('element');
+
+        $element.select2('close');
+      });
+    });
+
     this.$element.on('change', function () {
       self.data.current(function (data) {
         self.trigger('selection:update', {
@@ -1864,6 +1884,8 @@ define('select2/core',[
 
     this.$container = $container;
 
+    $container.data('element', this.$element);
+
     return $container;
   };
 

+ 23 - 1
dist/js/select2.full.js

@@ -11204,7 +11204,7 @@ define('select2/core',[
     // Bind the container to all of the adapters
     this._bindAdapters();
 
-    // Register any DOM event handler
+    // Register any DOM event handlers
     this._registerDomEvents();
 
     // Register any internal event handlers
@@ -11281,6 +11281,26 @@ define('select2/core',[
   Select2.prototype._registerDomEvents = function () {
     var self = this;
 
+    $(document.body).on('mousedown', function (e) {
+      var $target = $(e.target);
+
+      var $select = $target.closest('.select2');
+
+      var $all = $('.select2.open');
+
+      $all.each(function () {
+        var $this = $(this);
+
+        if (this == $select[0]) {
+          return;
+        }
+
+        var $element = $this.data('element');
+
+        $element.select2('close');
+      });
+    });
+
     this.$element.on('change', function () {
       self.data.current(function (data) {
         self.trigger('selection:update', {
@@ -11399,6 +11419,8 @@ define('select2/core',[
 
     this.$container = $container;
 
+    $container.data('element', this.$element);
+
     return $container;
   };
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/js/select2.full.min.js


+ 23 - 1
dist/js/select2.js

@@ -2097,7 +2097,7 @@ define('select2/core',[
     // Bind the container to all of the adapters
     this._bindAdapters();
 
-    // Register any DOM event handler
+    // Register any DOM event handlers
     this._registerDomEvents();
 
     // Register any internal event handlers
@@ -2174,6 +2174,26 @@ define('select2/core',[
   Select2.prototype._registerDomEvents = function () {
     var self = this;
 
+    $(document.body).on('mousedown', function (e) {
+      var $target = $(e.target);
+
+      var $select = $target.closest('.select2');
+
+      var $all = $('.select2.open');
+
+      $all.each(function () {
+        var $this = $(this);
+
+        if (this == $select[0]) {
+          return;
+        }
+
+        var $element = $this.data('element');
+
+        $element.select2('close');
+      });
+    });
+
     this.$element.on('change', function () {
       self.data.current(function (data) {
         self.trigger('selection:update', {
@@ -2292,6 +2312,8 @@ define('select2/core',[
 
     this.$container = $container;
 
+    $container.data('element', this.$element);
+
     return $container;
   };
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/js/select2.min.js


+ 22 - 0
src/js/select2/core.js

@@ -128,6 +128,26 @@ define([
   Select2.prototype._registerDomEvents = function () {
     var self = this;
 
+    $(document.body).on('mousedown', function (e) {
+      var $target = $(e.target);
+
+      var $select = $target.closest('.select2');
+
+      var $all = $('.select2.open');
+
+      $all.each(function () {
+        var $this = $(this);
+
+        if (this == $select[0]) {
+          return;
+        }
+
+        var $element = $this.data('element');
+
+        $element.select2('close');
+      });
+    });
+
     this.$element.on('change', function () {
       self.data.current(function (data) {
         self.trigger('selection:update', {
@@ -246,6 +266,8 @@ define([
 
     this.$container = $container;
 
+    $container.data('element', this.$element);
+
     return $container;
   };
 

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.