From: Heinrich Fenkart Date: Wed, 22 Oct 2014 01:49:03 +0000 (+0200) Subject: Don't fire show event if show is prevented because other element is still transitioning X-Git-Tag: v3.3.0~85 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e811a2411827ad2da3821b6357c920bc903c3b82;p=thirdparty%2Fbootstrap.git Don't fire show event if show is prevented because other element is still transitioning Fixes #14844. Closes #14845. --- diff --git a/js/collapse.js b/js/collapse.js index d7d56bdd5e..abbf25f2a6 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() diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js index 825f79360e..c1d78575c6 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 = '
' + + '