From e8922c87d302d293cfc4c7360601802c6ad8a12a Mon Sep 17 00:00:00 2001 From: Heinrich Fenkart Date: Wed, 22 Oct 2014 03:49:03 +0200 Subject: [PATCH 1/2] Don't fire show event if show is prevented because other element is transitioning --- js/collapse.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/js/collapse.js b/js/collapse.js index d7d56bdd5ee2..abbf25f2a6a7 100644 --- a/js/collapse.js +++ b/js/collapse.js @@ -38,17 +38,21 @@ Collapse.prototype.show = function () { if (this.transitioning || this.$element.hasClass('in')) return + var activesData + var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + var startEvent = $.Event('show.bs.collapse') this.$element.trigger(startEvent) if (startEvent.isDefaultPrevented()) return - var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing') - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return Plugin.call(actives, 'hide') - hasData || actives.data('bs.collapse', null) + activesData || actives.data('bs.collapse', null) } var dimension = this.dimension() From 4fb36ba9336840e3e541b25e4352c144268718e4 Mon Sep 17 00:00:00 2001 From: Heinrich Fenkart Date: Wed, 22 Oct 2014 04:15:51 +0200 Subject: [PATCH 2/2] Add unit test --- js/tests/unit/collapse.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js index 825f79360e9f..c1d78575c6ba 100644 --- a/js/tests/unit/collapse.js +++ b/js/tests/unit/collapse.js @@ -263,4 +263,39 @@ $(function () { $target3.click() }) + test('should not fire show event if show is prevented because other element is still transitioning', function () { + stop() + + var accordionHTML = '