From: Johann-S Date: Wed, 22 Jul 2015 19:57:31 +0000 (+0200) Subject: Fix triggering of {shown,hidden}.bs.dropdown events so relatedTarget gets set properly X-Git-Tag: v3.3.6~73 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef1ce9ac0bbe7dbd513c2d603e3541fcdeac24ef;p=thirdparty%2Fbootstrap.git Fix triggering of {shown,hidden}.bs.dropdown events so relatedTarget gets set properly Fixes #16828 Closes #16865 --- diff --git a/js/dropdown.js b/js/dropdown.js index bc4d373434..612e92a250 100644 --- a/js/dropdown.js +++ b/js/dropdown.js @@ -51,7 +51,7 @@ if (e.isDefaultPrevented()) return $this.attr('aria-expanded', 'false') - $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) }) } @@ -85,7 +85,7 @@ $parent .toggleClass('open') - .trigger('shown.bs.dropdown', relatedTarget) + .trigger($.Event('shown.bs.dropdown', relatedTarget)) } return false diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js index a55684d520..566b50ee7e 100644 --- a/js/tests/unit/dropdown.js +++ b/js/tests/unit/dropdown.js @@ -286,6 +286,38 @@ $(function () { $(document.body).trigger('click') }) + QUnit.test('should fire shown and hidden event with a relatedTarget', function (assert) { + assert.expect(2) + var dropdownHTML = '' + var $dropdown = $(dropdownHTML) + .appendTo('#qunit-fixture') + .find('[data-toggle="dropdown"]') + .bootstrapDropdown() + var done = assert.async() + + $dropdown.parent('.dropdown') + .on('hidden.bs.dropdown', function (e) { + assert.strictEqual(e.relatedTarget, $dropdown[0]) + done() + }) + .on('shown.bs.dropdown', function (e) { + assert.strictEqual(e.relatedTarget, $dropdown[0]) + $(document.body).trigger('click') + }) + + $dropdown.trigger('click') + }) + QUnit.test('should ignore keyboard events within s and