aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/src/collapse.js3
-rw-r--r--js/tests/unit/collapse.js25
-rw-r--r--js/tests/visual/collapse.html2
3 files changed, 28 insertions, 2 deletions
diff --git a/js/src/collapse.js b/js/src/collapse.js
index 718630bd3..7d1ba4c54 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -361,7 +361,8 @@ const Collapse = (($) => {
*/
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
- if (!/input|textarea/i.test(event.target.tagName)) {
+ // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
+ if (event.target.tagName === 'A' && !$.contains(this, event.target)) {
event.preventDefault()
}
diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js
index 4470a18c2..9ecb60994 100644
--- a/js/tests/unit/collapse.js
+++ b/js/tests/unit/collapse.js
@@ -673,4 +673,29 @@ $(function () {
})
$trigger3.trigger('click')
})
+
+ QUnit.test('should not prevent interactions inside the collapse element', function (assert) {
+ assert.expect(2)
+ var done = assert.async()
+
+ var $target = $('<input type="checkbox" data-toggle="collapse" data-target="#collapsediv1" />').appendTo('#qunit-fixture')
+ var htmlCollapse =
+ '<div id="collapsediv1" class="collapse">' +
+ ' <input type="checkbox" id="testCheckbox" />' +
+ '</div>'
+
+ $(htmlCollapse)
+ .appendTo('#qunit-fixture')
+ .on('shown.bs.collapse', function () {
+ assert.ok($target.prop('checked'), '$trigger is checked')
+ var $testCheckbox = $('#testCheckbox')
+ $testCheckbox.trigger($.Event('click'))
+ setTimeout(function () {
+ assert.ok($testCheckbox.prop('checked'), '$testCheckbox is checked too')
+ done()
+ }, 5)
+ })
+
+ $target.trigger($.Event('click'))
+ })
})
diff --git a/js/tests/visual/collapse.html b/js/tests/visual/collapse.html
index 1d61ef19c..6b4e89bfb 100644
--- a/js/tests/visual/collapse.html
+++ b/js/tests/visual/collapse.html
@@ -57,7 +57,7 @@
</div>
</div>
- <script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script>
+ <script src="../../../assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/collapse.js"></script>
</body>