如何让子元素的click事件不会影响到父元素的dbclick事件?

作者站长头像
站长
· 阅读数 18

子元素有click事件,父元素有dbclick事件,想要做到快速双击子元素的时候,不要触发父元素的dbclick事件

<div @dblclick="changeFullScreen">
    <div @click.stop="showPreset($event)">
    </div>
</div>

showPreset(event) {
    console.log('aaaaa')
    // event.topImmediatePropagation()
    // return false
}

changeFullScreen() {
    console.log('bbbb')
}

尝试了给子元素添加阻止冒泡、return false等操作,均无效

回复
1个回答
avatar
test
2024-06-23

你这是事件冒泡使用错误,点击事件和双击事件都不是同一个事件,你阻止单击事件冒泡跟双击事件冒泡有什么关系呢?所以你要做的是在子元素上也绑定上双击事件,但是这个双击事件什么都不做。

有两种方式,第一种是子元素也绑定双击事件,该事件什么都不做只做阻止双击事件冒泡:

<div @dblclick="changeFullScreen">

    // 在子元素上绑定双击事件并阻止双击事件冒泡
    <div @click="showPreset($event)" @dbclick.stop="nothingFn">
    </div>
</div>

// nothingFn 这个函数什么都不做
nothingFn() {};

showPreset(event) {
    console.log('aaaaa')
    // event.topImmediatePropagation()
    // return false
}

changeFullScreen() {
    console.log('bbbb')
}

第二种方式是利用事件冒泡的原理,查看事件对象event.target,通过这种方式判断到底是谁触发双击事件,如果是父元素就执行,如果是子元素就不执行。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容