From ef1ce9ac0bbe7dbd513c2d603e3541fcdeac24ef Mon Sep 17 00:00:00 2001 From: Johann-S Date: Wed, 22 Jul 2015 21:57:31 +0200 Subject: [PATCH] Fix triggering of {shown,hidden}.bs.dropdown events so relatedTarget gets set properly Fixes #16828 Closes #16865 --- js/dropdown.js | 4 ++-- js/tests/unit/dropdown.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) 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