浏览代码

Only trigger `unselect` for multiple

This fixes an issue where an `unselect` event would be incorrectly
triggered when the selected option was selected again in a single
select. This has been fixed now, so the even will only be triggered
for multiple selects. The `close` event will still be triggered
though, so the functionality will still remain the same to the user.

This closes https://github.com/select2/select2/issues/2959.
Kevin Brown 10 年之前
父节点
当前提交
981c4065af
共有 7 个文件被更改,包括 103 次插入35 次删除
  1. 22 7
      dist/js/select2.amd.full.js
  2. 22 7
      dist/js/select2.amd.js
  3. 22 7
      dist/js/select2.full.js
  4. 0 0
      dist/js/select2.full.min.js
  5. 22 7
      dist/js/select2.js
  6. 0 0
      dist/js/select2.min.js
  7. 15 7
      src/js/select2/results.js

+ 22 - 7
dist/js/select2.amd.full.js

@@ -479,9 +479,13 @@ define('select2/results',[
       var data = $highlighted.data('data');
 
       if ($highlighted.attr('aria-selected') == 'true') {
-        self.trigger('unselect', {
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
       } else {
         self.trigger('select', {
           data: data
@@ -597,10 +601,14 @@ define('select2/results',[
       var data = $this.data('data');
 
       if ($this.attr('aria-selected') === 'true') {
-        self.trigger('unselect', {
-          originalEvent: evt,
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            originalEvent: evt,
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
 
         return;
       }
@@ -3632,6 +3640,13 @@ define('select2/defaults',[
           HidePlaceholder
         );
       }
+
+      if (options.selectOnClose) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          SelectOnClose
+        );
+      }
     }
 
     if (options.dropdownAdapter == null) {

+ 22 - 7
dist/js/select2.amd.js

@@ -479,9 +479,13 @@ define('select2/results',[
       var data = $highlighted.data('data');
 
       if ($highlighted.attr('aria-selected') == 'true') {
-        self.trigger('unselect', {
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
       } else {
         self.trigger('select', {
           data: data
@@ -597,10 +601,14 @@ define('select2/results',[
       var data = $this.data('data');
 
       if ($this.attr('aria-selected') === 'true') {
-        self.trigger('unselect', {
-          originalEvent: evt,
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            originalEvent: evt,
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
 
         return;
       }
@@ -3632,6 +3640,13 @@ define('select2/defaults',[
           HidePlaceholder
         );
       }
+
+      if (options.selectOnClose) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          SelectOnClose
+        );
+      }
     }
 
     if (options.dropdownAdapter == null) {

+ 22 - 7
dist/js/select2.full.js

@@ -917,9 +917,13 @@ define('select2/results',[
       var data = $highlighted.data('data');
 
       if ($highlighted.attr('aria-selected') == 'true') {
-        self.trigger('unselect', {
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
       } else {
         self.trigger('select', {
           data: data
@@ -1035,10 +1039,14 @@ define('select2/results',[
       var data = $this.data('data');
 
       if ($this.attr('aria-selected') === 'true') {
-        self.trigger('unselect', {
-          originalEvent: evt,
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            originalEvent: evt,
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
 
         return;
       }
@@ -4070,6 +4078,13 @@ define('select2/defaults',[
           HidePlaceholder
         );
       }
+
+      if (options.selectOnClose) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          SelectOnClose
+        );
+      }
     }
 
     if (options.dropdownAdapter == null) {

文件差异内容过多而无法显示
+ 0 - 0
dist/js/select2.full.min.js


+ 22 - 7
dist/js/select2.js

@@ -917,9 +917,13 @@ define('select2/results',[
       var data = $highlighted.data('data');
 
       if ($highlighted.attr('aria-selected') == 'true') {
-        self.trigger('unselect', {
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
       } else {
         self.trigger('select', {
           data: data
@@ -1035,10 +1039,14 @@ define('select2/results',[
       var data = $this.data('data');
 
       if ($this.attr('aria-selected') === 'true') {
-        self.trigger('unselect', {
-          originalEvent: evt,
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            originalEvent: evt,
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
 
         return;
       }
@@ -4070,6 +4078,13 @@ define('select2/defaults',[
           HidePlaceholder
         );
       }
+
+      if (options.selectOnClose) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          SelectOnClose
+        );
+      }
     }
 
     if (options.dropdownAdapter == null) {

文件差异内容过多而无法显示
+ 0 - 0
dist/js/select2.min.js


+ 15 - 7
src/js/select2/results.js

@@ -281,9 +281,13 @@ define([
       var data = $highlighted.data('data');
 
       if ($highlighted.attr('aria-selected') == 'true') {
-        self.trigger('unselect', {
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
       } else {
         self.trigger('select', {
           data: data
@@ -399,10 +403,14 @@ define([
       var data = $this.data('data');
 
       if ($this.attr('aria-selected') === 'true') {
-        self.trigger('unselect', {
-          originalEvent: evt,
-          data: data
-        });
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            originalEvent: evt,
+            data: data
+          });
+        } else {
+          self.trigger('close');
+        }
 
         return;
       }

部分文件因为文件数量过多而无法显示