【问题标题】:Zurb Foundation 6: Trigger event when accordion menu opens?Zurb Foundation 6:手风琴菜单打开时触发事件?
【发布时间】:2020-08-03 20:25:46
【问题描述】:

我正在使用 Zurb Foundation 6 Accordion 菜单。手风琴项打开时如何触发 JQuery 函数?我认为这可能与 down.zf.accordionMenu 有关,但我没有找到任何示例。

我从this post 发现我可以测试是否有任何手风琴菜单打开,但是如果我只想测试特定项目何时打开怎么办?以下是所有这些的代码:

jQuery('#id_of_accordion').on('down.zf.accordion', function() {
  //run code here
});

【问题讨论】:

    标签: jquery zurb-foundation


    【解决方案1】:

    您从侦听器获取元素作为第二个参数。

    https://github.com/foundation/foundation-sites/blob/develop/js/foundation.accordion.js#L282

    this.$element.trigger('down.zf.accordion', [$target]);
    

    https://api.jquery.com/trigger/

    查看处理程序的文档https://api.jquery.com/on/

    使用这段代码时看看控制台:

    <ul class="accordion" data-accordion>
      <li id="accordion-1" class="accordion-item is-active" data-accordion-item>
        <!-- Accordion tab title -->
        <a href="#" class="accordion-title">Accordion 1</a>
    
        <!-- Accordion tab content: it would start in the open state due to using the `is-active` state class. -->
        <div class="accordion-content" id="accordion-content-1" data-tab-content>
          <p>Panel 1. Lorem ipsum dolor</p>
          <a href="#">Nowhere to Go</a>
        </div>
      </li>
       <li id="accordion-2" class="accordion-item" data-accordion-item>
        <!-- Accordion tab title -->
        <a href="#" class="accordion-title">Accordion 2</a>
    
        <!-- Accordion tab content: it would start in the open state due to using the `is-active` state class. -->
        <div class="accordion-content" id="accordion-content-2" data-tab-content>
          <p>Panel 2. Lorem ipsum dolor</p>
          <a href="#">Nowhere to Go</a>
        </div>
      </li>
      <!-- ... -->
    </ul>
    
    $(document).foundation();
    
    $('[data-accordion]').on('down.zf.accordion', function(event, element) {
      console.log(element);
      if($(element).attr('id') === 'accordion-content-2') {
        console.log('accordion 2 opened');
      }
    });
    

    https://codepen.io/DanielRuf/pen/OJNPWog查看codepen

    【讨论】:

    • 感谢您查看此内容。我想我是菜鸟,因为我还是不太明白。在我的示例中,如果我想测试“tab2”,该函数是否如下所示: jQuery('#id_of_accordion').on('down.zf.accordion', [jQuery('#tab2')], function( ) { //在这里运行代码 });另外,在那之后会有什么代码?当我尝试这个时,我没有收到错误,但是每当手风琴打开而不是仅在 tab2 打开时,我仍然会得到结果。
    • 我已更新 myanswer 并添加了示例代码,因此您只需检查您在浏览器控制台中看到的内容。一般来说,它应该是一个 jQuery 对象(元素)。
    • [] 括号表示文档中的可选参数,处理程序中的第一个参数(匿名function())始终是事件,之后将所有额外参数传递给trigger()
    • 哇。我很抱歉这么密集,但我不明白。您的示例函数返回手风琴对象并显示有关我单击的选项卡的信息是正确的,但我仍然不明白如何仅测试是否单击了“tab2”。就像现在一样,所有选项卡仍然返回答案。我将您的功能添加到我的实时页面并离开了 console.log。结果显示如下: [div#opcert.accordion-content ... 在这个现场版本中,我有兴趣听的是 div#opcert。我想知道它什么时候完成开放。 deq.utah.gov/drinking-water/payment-portal
    • 这是意料之中的,您没有在问题中提供任何代码示例,因此我无法提供明确的答案。一般来说,您必须使用 $(element).attr('id') === 'opcert' 之类的检查来检查匿名函数中的元素,这是基本的 jQuery。另见stackoverflow.com/questions/10885477/jquery-check-element-id。如果您的检查返回 true,您希望执行所需的逻辑。
    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多