【问题标题】:delegate panel heading click to inner link for bootstrap accordion代表面板标题单击到引导手风琴的内部链接
【发布时间】:2018-08-01 06:16:19
【问题描述】:

我有一个引导面板手风琴:

<div class="modal-body">
   <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
      <div class="panel panel-default">
         <div class="panel-heading" role="tab" id="headingOne">
            <h4 class="panel-title">
               <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne" class="collapsed">
               Annual </a>
            </h4>
         </div>
         <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne" aria-expanded="false" style="height: 0px;">
            <div class="panel-body"></div>
         </div>
      </div>
      <div class="panel panel-default">
         <div class="panel-heading" role="tab" id="headingTwo">
            <h4 class="panel-title">
               <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
               Semi-Annual </a>
            </h4>
         </div>
         <div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo" aria-expanded="false" style="height: 0px;">
            <div class="panel-body"></div>
         </div>
      </div>
   </div>
</div>

我希望整个.panel-heading 触发内部&lt;a&gt; 的点击,而不是点击微小的&lt;a&gt; 链接。

由于明显的Maximum call stack size exceeded 错误,我无法使用以下代码:

panelHeadings.on('click', function (e) {
    $(this).find('a').click(); // trigger('click') behaves the same
    e.stopPropagation();
    e.preventDefault();
    return false;
});

...但是使用this question 的答案中的代码导致我单击时没有任何反应:

panelHeadings.on('click', function (e) {
    $(this).find('a').triggerHandler('click');
    e.stopPropagation();
    e.preventDefault();
});

还有其他方法可以触发内a的点击事件吗?

【问题讨论】:

    标签: jquery twitter-bootstrap accordion bootstrap-accordion


    【解决方案1】:

    这是一种方法——使用BS-collapse-toggle

    锚标记的默认事件被阻止,新事件被添加到panel-heading

    $('div#accordion .panel-heading a[data-toggle="collapse"]').on('click', function (e) {
      e.preventDefault();
    });
    
    $('div#accordion .panel-heading').on('click', function() {
      $(this).parent().find('.collapse').collapse('toggle');
    });
    

    $('div#accordion .panel-heading a[data-toggle="collapse"]').on('click', function (e) {
    	e.preventDefault();
    });
    
    $('div#accordion .panel-heading').on('click', function() {
    	$(this).parent().find('.collapse').collapse('toggle');
    });
    div#accordion .panel-heading {
      cursor: pointer;
    }
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    
    <script src="https://code.jquery.com/jquery-3.2.1.js"></script>
    <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
    <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
          <div class="panel panel-default">
             <div class="panel-heading" role="tab" id="headingOne">
                <h4 class="panel-title">
                   <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne" class="collapsed">
                   Annual </a>
                </h4>
             </div>
             <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne" aria-expanded="false" style="height: 0px;">
                <div class="panel-body"></div>
             </div>
          </div>
          <div class="panel panel-default">
             <div class="panel-heading" role="tab" id="headingTwo">
                <h4 class="panel-title">
                   <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
                   Semi-Annual </a>
                </h4>
             </div>
             <div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo" aria-expanded="false" style="height: 0px;">
                <div class="panel-body"></div>
             </div>
          </div>
       </div>

    希望这会有所帮助。

    【讨论】:

    • 谢谢,我忘记了 collapse() 函数!
    • 当然。我只是在我正在处理的应用程序中做了同样的事情。 :) 无论如何,很乐意提供帮助。
    猜你喜欢
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多