我使用的是彼此嵌套的BS4手风琴。

我已经遇到了事件与父级对子级和子级对父级的冒泡,我都使用event.stopPropagation()解决了一个从子级对父级的事件,但是从父级到子级的事件冒泡却没有停止,为什么?

这是代码

$('.card > .collapse').on('shown.bs.collapse', function(e){
    e.preventDefault();  
    e.stopPropagation();
      $(this).parent().find(".flaticon-down-arrow").removeClass("flaticon-down-arrow").addClass("flaticon-right-arrow");

  }).on('hidden.bs.collapse', function(e){
    e.preventDefault();  
    e.stopPropagation();
    $(this).parent().find(".flaticon-right-arrow").removeClass("flaticon-right-arrow").addClass("flaticon-down-arrow");

})


Here is my codepen link

注意:-检查班级的变化

最佳答案

事件冒泡只会在DOM树上发生(从孩子到父母,再到祖父母等等)。它不会在DOM树中消失。因此,父母上的任何事件都不会影响到孩子。

documentation指出在事件冒泡期间(对于单击事件):


  浏览器检查在冒泡阶段实际单击的元素是否在其上注册了onclick事件处理程序,如果是,则运行该事件处理程序。
  然后,它继续前进到下一个直接祖先元素,并执行相同的操作,然后再执行下一个,依此类推,直到到达该元素。

07-24 21:01