我使用的是彼此嵌套的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事件处理程序,如果是,则运行该事件处理程序。
然后,它继续前进到下一个直接祖先元素,并执行相同的操作,然后再执行下一个,依此类推,直到到达该元素。