普通视图

发现新文章,点击刷新页面。
昨天 — 2025年5月17日首页

父子都有点击事件,阻止冒泡event.stopPropagation()

2025年5月17日 11:12

为什么需要阻止冒泡?

假设结构是这样包裹的,两层都有点击事件,

    <button @click="handleContinue">继续学习</button> 
   </div>

在点击内层的按钮时,会导致向父元素冒泡外层元素的点击事件同时也被触发,从而可能导致多个 $router.push() 被调用,导致两次路由跳转 → 而第一次被取消,控制台就会报错。

阻止冒泡的正确使用:

1、结构中事件中携带event:

      @click="handleContinue($event)" > 继续学习 </el-button>

2、 阻止冒泡event.stopPropagation()

methods: {
  handleContinue(event) {
    event.stopPropagation(); // 阻止冒泡
    console.log('跳转继续学习 /my-courses');
    this.$router.push('/my-courses');
  },
  bannerClick() {
    this.$router.push('/my-content');
  }
}

这样就能避免因事件冒泡导致的重复导航和控制台警告了。

event.stopPropagation()方法用于阻止事件继续传播‌,适用于需要精确控制事件影响范围的场景,如防止点击一个元素时触发其父元素的特定行为。 event.preventDefault()方法用于阻止事件的默认行为‌,适用于需要自定义处理某些操作的场景,如表单提交、链接导航等。

❌
❌