From cf095d9fee82933898f98307c5990e38a754eea3 Mon Sep 17 00:00:00 2001 From: phtrivier Date: Wed, 30 Jan 2013 10:21:40 +0100 Subject: [PATCH] #619 : val takes an optional argument to avoid triggering 'change' --- select2.js | 32 +++++++++++++++++++++++++------- test-619.html | 28 ++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 test-619.html diff --git a/select2.js b/select2.js index 7792551b..1e602f5e 100644 --- a/select2.js +++ b/select2.js @@ -1736,7 +1736,7 @@ the specific language governing permissions and limitations under the Apache Lic // single val: function () { - var val, data = null, self = this; + var val, triggerChange = true, data = null, self = this; if (arguments.length === 0) { return this.opts.element.val(); @@ -1744,6 +1744,10 @@ the specific language governing permissions and limitations under the Apache Lic val = arguments[0]; + if (arguments.length > 1) { + triggerChange = arguments[1]; + } + if (this.select) { this.select .val(val) @@ -1753,7 +1757,9 @@ the specific language governing permissions and limitations under the Apache Lic }); this.updateSelection(data); this.setPlaceholder(); - this.triggerChange(); + if (triggerChange) { + this.triggerChange(); + } } else { if (this.opts.initSelection === undefined) { throw new Error("cannot call val() if initSelection() is not defined"); @@ -1761,7 +1767,9 @@ the specific language governing permissions and limitations under the Apache Lic // val is an id. !val is true for [undefined,null,''] if (!val) { this.clear(); - this.triggerChange(); + if (triggerChange) { + this.triggerChange(); + } return; } this.opts.element.val(val); @@ -2278,7 +2286,7 @@ the specific language governing permissions and limitations under the Apache Lic // multi val: function () { - var val, data = [], self=this; + var val, triggerChange = true, data = [], self=this; if (arguments.length === 0) { return this.getVal(); @@ -2286,11 +2294,17 @@ the specific language governing permissions and limitations under the Apache Lic val = arguments[0]; + if (arguments.length > 1) { + triggerChange = arguments[1]; + } + if (!val) { this.opts.element.val(""); this.updateSelection([]); this.clearSearch(); - this.triggerChange(); + if (triggerChange) { + this.triggerChange(); + } return; } @@ -2302,7 +2316,9 @@ the specific language governing permissions and limitations under the Apache Lic data.push({id: $(this).attr("value"), text: $(this).text()}); }); this.updateSelection(data); - this.triggerChange(); + if (triggerChange) { + this.triggerChange(); + } } else { if (this.opts.initSelection === undefined) { throw new Error("val() cannot be called if initSelection() is not defined") @@ -2313,7 +2329,9 @@ the specific language governing permissions and limitations under the Apache Lic self.setVal(ids); self.updateSelection(data); self.clearSearch(); - self.triggerChange(); + if (triggerChange) { + self.triggerChange(); + } }); } this.clearSearch(); diff --git a/test-619.html b/test-619.html new file mode 100644 index 00000000..613af682 --- /dev/null +++ b/test-619.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + +