ソースを参照

fix callback using this.current.
add example.

Zubair 10 年 前
コミット
e18fa1b5b8

+ 12 - 9
dist/js/select2.amd.full.js

@@ -2863,20 +2863,23 @@ define('select2/data/maximumSelectionLength',[
 
   MaximumSelectionLength.prototype.query =
     function (decorated, params, callback) {
+      var self = this;
 
-    var count = this.$element.val() != null ? this.$element.val().length : 0;
-    if (count >= this.maximumSelectionLength) {
-      this.trigger('results:message', {
-        message: 'maximumSelected',
-        args: {
-          maximum: this.maximumSelectionLength
+      this.current(function (currentData) {
+        var count = currentData != null ? currentData.length : 0;
+        if (count >= self.maximumSelectionLength) {
+          self.trigger('results:message', {
+            message: 'maximumSelected',
+            args: {
+              maximum: self.maximumSelectionLength
+            }
+          });
+          return;
         }
+        decorated.call(self, params, callback);
       });
 
-      return;
-    }
 
-    decorated.call(this, params, callback);
   };
 
   return MaximumSelectionLength;

+ 12 - 9
dist/js/select2.amd.js

@@ -2863,20 +2863,23 @@ define('select2/data/maximumSelectionLength',[
 
   MaximumSelectionLength.prototype.query =
     function (decorated, params, callback) {
+      var self = this;
 
-    var count = this.$element.val() != null ? this.$element.val().length : 0;
-    if (count >= this.maximumSelectionLength) {
-      this.trigger('results:message', {
-        message: 'maximumSelected',
-        args: {
-          maximum: this.maximumSelectionLength
+      this.current(function (currentData) {
+        var count = currentData != null ? currentData.length : 0;
+        if (count >= self.maximumSelectionLength) {
+          self.trigger('results:message', {
+            message: 'maximumSelected',
+            args: {
+              maximum: self.maximumSelectionLength
+            }
+          });
+          return;
         }
+        decorated.call(self, params, callback);
       });
 
-      return;
-    }
 
-    decorated.call(this, params, callback);
   };
 
   return MaximumSelectionLength;

+ 12 - 9
dist/js/select2.full.js

@@ -12398,20 +12398,23 @@ define('select2/data/maximumSelectionLength',[
 
   MaximumSelectionLength.prototype.query =
     function (decorated, params, callback) {
+      var self = this;
 
-    var count = this.$element.val() != null ? this.$element.val().length : 0;
-    if (count >= this.maximumSelectionLength) {
-      this.trigger('results:message', {
-        message: 'maximumSelected',
-        args: {
-          maximum: this.maximumSelectionLength
+      this.current(function (currentData) {
+        var count = currentData != null ? currentData.length : 0;
+        if (count >= self.maximumSelectionLength) {
+          self.trigger('results:message', {
+            message: 'maximumSelected',
+            args: {
+              maximum: self.maximumSelectionLength
+            }
+          });
+          return;
         }
+        decorated.call(self, params, callback);
       });
 
-      return;
-    }
 
-    decorated.call(this, params, callback);
   };
 
   return MaximumSelectionLength;

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/js/select2.full.min.js


+ 12 - 9
dist/js/select2.js

@@ -3291,20 +3291,23 @@ define('select2/data/maximumSelectionLength',[
 
   MaximumSelectionLength.prototype.query =
     function (decorated, params, callback) {
+      var self = this;
 
-    var count = this.$element.val() != null ? this.$element.val().length : 0;
-    if (count >= this.maximumSelectionLength) {
-      this.trigger('results:message', {
-        message: 'maximumSelected',
-        args: {
-          maximum: this.maximumSelectionLength
+      this.current(function (currentData) {
+        var count = currentData != null ? currentData.length : 0;
+        if (count >= self.maximumSelectionLength) {
+          self.trigger('results:message', {
+            message: 'maximumSelected',
+            args: {
+              maximum: self.maximumSelectionLength
+            }
+          });
+          return;
         }
+        decorated.call(self, params, callback);
       });
 
-      return;
-    }
 
-    decorated.call(this, params, callback);
   };
 
   return MaximumSelectionLength;

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/js/select2.min.js


+ 34 - 1
docs/examples.html

@@ -67,6 +67,35 @@ $(document).ready(function() {
 <script type="text/x-example-code" class="js-code-multiple">
 $(".js-example-basic-multiple").select2();
 
+<select class="js-example-basic-multiple" multiple="multiple">
+  <option value="AL">Alabama</option>
+    ...
+  <option value="WY">Wyoming</option>
+</select>
+</script>
+    </div>
+  </section>
+
+  <section id="multiple_max" class="row">
+    <div class="col-md-4">
+      <h1>Limited Multiple select boxes</h1>
+      <p>Select2 multi-value select boxes can set restrictions regarding the maximum number of options selected.
+        The select below is declared with the <code>multiple</code> attribute with <code>maxSelectionLength</code> in the select2 options</p>
+
+      <p>
+        <select class="js-example-basic-multiple-limit js-states form-control" multiple="multiple"></select>
+      </p>
+    </div>
+    <div class="col-md-8">
+      <h2>Example code</h2>
+
+      <pre data-fill-from=".js-code-multiple-limit"></pre>
+
+<script type="text/x-example-code" class="js-code-multiple-limit">
+$(".js-example-basic-multiple-limit").select2({
+  maximumSelectionLength: 2
+  });
+
 <select class="js-example-basic-multiple" multiple="multiple">
   <option value="AL">Alabama</option>
     ...
@@ -812,6 +841,7 @@ $.fn.select2.amd.require(
     function (Select2, Utils, oldMatcher) {
   var $basicSingle = $(".js-example-basic-single");
   var $basicMultiple = $(".js-example-basic-multiple");
+  var $limitMultiple = $(".js-example-basic-multiple-limit");
 
   var $dataArray = $(".js-example-data-array");
   var $dataArraySelected = $(".js-example-data-array-selected");
@@ -830,7 +860,10 @@ $.fn.select2.amd.require(
   var $language = $(".js-example-language");
 
   $basicSingle.select2();
-  $basicMultiple.select2()
+  $basicMultiple.select2();
+  $limitMultiple.select2({
+    maximumSelectionLength: 2
+  });
 
   $dataArray.select2({
     data: data

+ 12 - 11
src/js/select2/data/maximumSelectionLength.js

@@ -9,20 +9,21 @@ define([
 
   MaximumSelectionLength.prototype.query =
     function (decorated, params, callback) {
+      var self = this;
 
-    var count = this.current() != null ? this.current().length : 0;
-    if (count >= this.maximumSelectionLength) {
-      this.trigger('results:message', {
-        message: 'maximumSelected',
-        args: {
-          maximum: this.maximumSelectionLength
+      this.current(function (currentData) {
+        var count = currentData != null ? currentData.length : 0;
+        if (count >= self.maximumSelectionLength) {
+          self.trigger('results:message', {
+            message: 'maximumSelected',
+            args: {
+              maximum: self.maximumSelectionLength
+            }
+          });
+          return;
         }
+        decorated.call(self, params, callback);
       });
-
-      return;
-    }
-
-    decorated.call(this, params, callback);
   };
 
   return MaximumSelectionLength;

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません