From be4eba2c807e5de4005e02b9fd42a106bc079484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20=C5=9Amia=C5=82ek?= Date: Tue, 26 Sep 2017 16:20:08 +0200 Subject: [PATCH] Fix value not being cleared when unselect event is emitted Fixes #5049. --- src/js/select2/selection/allowClear.js | 6 +++++- tests/selection/allowClear-tests.js | 22 +++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/js/select2/selection/allowClear.js b/src/js/select2/selection/allowClear.js index d3502069f5..b2e890e56a 100644 --- a/src/js/select2/selection/allowClear.js +++ b/src/js/select2/selection/allowClear.js @@ -45,6 +45,9 @@ define([ var data = $clear.data('data'); + var previousVal = this.$element.val(); + this.$element.val(this.placeholder.id); + for (var d = 0; d < data.length; d++) { var unselectData = { data: data[d] @@ -56,11 +59,12 @@ define([ // If the event was prevented, don't clear it out. if (unselectData.prevented) { + this.$element.val(previousVal); return; } } - this.$element.val(this.placeholder.id).trigger('change'); + this.$element.trigger('change'); this.trigger('toggle', {}); }; diff --git a/tests/selection/allowClear-tests.js b/tests/selection/allowClear-tests.js index efa132aae3..c64fa61d3a 100644 --- a/tests/selection/allowClear-tests.js +++ b/tests/selection/allowClear-tests.js @@ -43,7 +43,7 @@ test('clear is not displayed for single placeholder', function (assert) { test('clear is not displayed for multiple placeholder', function (assert) { var selection = new AllowClearPlaceholder( - $('#qunit-fixture .single-with-placeholder'), + $('#qunit-fixture .multiple'), allowClearOptions ); @@ -90,7 +90,7 @@ test('clicking clear will set the placeholder value', function (assert) { var $selection = selection.render(); - selection.bind(container, $('
')); $element.val('One'); selection.update([{ @@ -109,7 +109,7 @@ test('clicking clear will set the placeholder value', function (assert) { }); test('clicking clear will trigger the unselect event', function (assert) { - assert.expect(3); + assert.expect(4); var $element = $('#qunit-fixture .single-with-placeholder'); @@ -121,7 +121,7 @@ test('clicking clear will trigger the unselect event', function (assert) { var $selection = selection.render(); - selection.bind(container, $('
')); $element.val('One'); selection.update([{ @@ -143,7 +143,13 @@ test('clicking clear will trigger the unselect event', function (assert) { assert.equal( ev.data.id, 'One', - 'The previous object should be unselected' + 'The data should be the unselected object' + ); + + assert.equal( + $element.val(), + 'placeholder', + 'The previous value should be unselected' ); }); @@ -151,8 +157,6 @@ test('clicking clear will trigger the unselect event', function (assert) { $remove.trigger('mousedown'); }); - - test('preventing the unselect event cancels the clearing', function (assert) { var $element = $('#qunit-fixture .single-with-placeholder'); @@ -164,7 +168,7 @@ test('preventing the unselect event cancels the clearing', function (assert) { var $selection = selection.render(); - selection.bind(container, $('
')); $element.val('One'); selection.update([{ @@ -197,7 +201,7 @@ test('clear does not work when disabled', function (assert) { var $selection = selection.render(); - selection.bind(container, $('
')); selection.update([{ id: 'One',