【问题标题】:JQuery's .next() doesn't seem to work when changing the object the event is bounded更改事件有界的对象时,JQuery 的 .next() 似乎不起作用
【发布时间】:2017-07-26 02:56:11
【问题描述】:

我有这个标记:

<div class="list-group-item participant-main">
   <i class="fa fa-chevron-down" id="chevron-for-div" aria-hidden="true"></i>
   <div class="row">
      <div class="col-sm-8">
         <h5 class="list-group-item-heading">A title</h5>
      </div>
      <div class="col-sm-4 list-group-item-quick-links ">
        <a href="#" />
        <a href="#" />
      </div>
   </div>
</div>

<div class='list-group-item hidden-group-item hide'>
   <div class="row">
      <div class="col-sm-8">
         <p class="list-group-item-text">
            Some text
         </p>
      </div>
      <div class="col-sm-4">
         <p class="list-group-item-text">
            More text
         </p>
      </div>
   </div>
</div>

以前,当通过此代码单击 .participant-main 时,我使用 Jquery 取消隐藏/隐藏 .hidden-group-item

$('body').on('click', '.member-main, .participant-main', function() {
  if ($(this).next('.hidden-group-item').hasClass('hide')) {
     $('.hidden-group-item').addClass('hide');
     $(this).next('.hidden-group-item').toggleClass('hide');
  }
  else {
     $(this).next('.hidden-group-item').toggleClass('hide');
  }
  $('.hidden-form-item').addClass('hide');
});

我正在添加一些指向.participant-main 的链接,因此我无法再将点击事件绑定到整个 div,因此新链接可以并行工作。然后我尝试将点击事件绑定到 div 内的特定元素,因此我将目标类移动到这样的特定元素。

<div class="list-group-item">
   <i class="fa fa-chevron-down participant-main" id="chevron-for-div" aria-hidden="true"></i>
   <div class="row">
      <div class="col-sm-8 participant-main">
         <h5 class="list-group-item-heading">A title</h5>
      </div>
      <div class="col-sm-4 list-group-item-quick-links ">
        <a href="#" />
        <a href="#" />
      </div>
   </div>
</div>

我希望它会起作用,但它没有。

我不明白为什么会发生这种情况以及如何解决。据我了解 .next() 抓取与指定选择器匹配的下一个元素。

【问题讨论】:

  • 你改变了你的html代码,你改变了你的javascript吗? bc 现在,.hidden-group-item 不是 .participant-main 的兄弟,和以前一样...

标签: javascript jquery html


【解决方案1】:

既然你已经嵌套了元素,你应该使用stopPropagation() 来阻止事件冒泡:

$('body').on('click', '.member-main, .participant-main', function(e) {
    e.stopPropagation();

    ...
});

希望这会有所帮助。

【讨论】:

  • 您好 Zakaria,谢谢,我已经尝试过您的方法,但没有按预期工作。 participant-main 中的那些链接是使用 ruby​​-on-rails 辅助方法生成的,所以在我添加 stopPropagation 之后,我确实能够同时单击它们的父 div 链接。但是,它搞砸了那些助手及其底层 js。他们应该进行 POST 调用,而不是进行 GET。我想知道是否有一种简单的方法可以将 div 中的元素链接到点击事件。
  • 嗨@Andrew,这里的示例应该确实可以尝试在小提琴或sn-p中重现问题,以便我们提供帮助..
猜你喜欢
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
相关资源
最近更新 更多