diff --git a/src/js/select2/core.js b/src/js/select2/core.js index 39410a9424..4ba2b2f97e 100644 --- a/src/js/select2/core.js +++ b/src/js/select2/core.js @@ -84,6 +84,9 @@ define([ this._syncAttributes(); Utils.StoreData($element[0], 'select2', this); + + // Ensure backwards compatibility with $element.data('select2'). + $element.data('select2', this); }; Utils.Extend(Select2, Utils.Observable); @@ -578,6 +581,7 @@ define([ this.$element.removeClass('select2-hidden-accessible'); this.$element.attr('aria-hidden', 'false'); Utils.RemoveData(this.$element[0]); + this.$element.removeData('select2'); this.dataAdapter.destroy(); this.selection.destroy(); diff --git a/tests/integration/jquery-calls.js b/tests/integration/jquery-calls.js index a5402b69c6..fb6bae678a 100644 --- a/tests/integration/jquery-calls.js +++ b/tests/integration/jquery-calls.js @@ -1,5 +1,7 @@ module('select2(val)'); +var Utils = require('select2/utils'); + test('multiple elements with arguments works', function (assert) { var $ = require('jquery'); require('jquery.select2'); @@ -56,4 +58,38 @@ test('initializes when jQuery $.data contains' + '3', 'The option value should be pulled correctly' ); +}); + +test('$element.data returns instance and options correctly', + function (assert) { + var $ = require('jquery'); + require('jquery.select2'); + + var $select = $( + '' + ); + + // Initialize. + $select.select2({maximumSelectionLength: 2, multiple: true}); + + assert.equal( + $select.val(), + '3', + 'Only 1 option should be pulled.' + ); + + // Try to resolve instance via .data('select2'). + var $instance = $select.data('select2'); + assert.ok($instance); + assert.ok($instance.options); + + // Ensure $select.data('select2') is the same instance created by .select2() + assert.equal($instance, Utils.GetData($instance.$element[0], 'select2')); + + // Ensure initialized property matches. + assert.equal($instance.options.options.maximumSelectionLength, 2); }); \ No newline at end of file