diff --git a/js/collapse.js b/js/collapse.js
index 6f2205b6ff53352f6c2f2baa439ad80f1c38aecc..42563c08e73f06f1e671d22468a823d5e5fb82bf 100644
--- a/js/collapse.js
+++ b/js/collapse.js
@@ -56,7 +56,11 @@
     this.transitioning = 1
 
     var complete = function (e) {
-      if (e && e.target != this.$element[0]) return
+      if (e && e.target != this.$element[0]) {
+        this.$element
+          .one($.support.transition.end, $.proxy(complete, this))
+        return
+      }
       this.$element
         .removeClass('collapsing')
         .addClass('collapse in')[dimension]('auto')
@@ -92,7 +96,11 @@
     this.transitioning = 1
 
     var complete = function (e) {
-      if (e && e.target != this.$element[0]) return
+      if (e && e.target != this.$element[0]) {
+        this.$element
+          .one($.support.transition.end, $.proxy(complete, this))
+        return
+      }
       this.transitioning = 0
       this.$element
         .trigger('hidden.bs.collapse')