Browse Source

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 năm trước cách đây
mục cha
commit
981c4065af

+ 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) {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 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) {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 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;
       }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác