手风琴面板不应在 if 条件下打开 - coffeescript

accordion panel should not open on if condition - coffeescript

我的 .html.slim 文件中有一个手风琴,它有两个面板。

要求:

CoffeeScript

$(document).on 'click', '.panel-heading', (e) ->
  panel = $(this).find('a').attr('href')
  if panel == '#collapseStepTwo' && !$('#my-checkbox').is(':checked')
    e.preventDefault()
    e.stopPropagation()
    return
  $('.panel-collapse.in').collapse('hide')
  $(panel).collapse('show');

问题:

当面板 1 中的复选框未选中时单击 Panel 2,它进入 if condition 和 return 但仍然打开 Panel 2,同时保持面板 1 保留打开。 这意味着 Panel 2 没有从 $(panel).collapse('show'); 打开,因为如果控件不是 return 来自 if 条件 $('.panel-collapse.in').collapse('hide') 应该关闭面板 1.

发生这种情况是因为 Bootstrap 将其事件侦听器绑定到手风琴。

您可以通过停止事件传播来阻止这些侦听器触发。

在你的例子中,你试图停止传播 click 事件,但是 bootstrap 有它自己的事件,这些事件在手风琴打开或关闭时触发。

你可以这样做

$(document).on "show.bs.collapse", "#collapseStepTwo, (e) ->
  if !$('#my-checkbox').is(':checked')
    e.stopPropagation()

您可以在此处了解有关 Bootstrap 手风琴的更多信息:

https://getbootstrap.com/docs/3.4/javascript/#collapse-events