vue中父元素点击事件与子元素点击事件冲突
vue中父元素点击事件与子元素点击事件冲突在做vue项目的时候,遇到子元素有点击事件,父元素也有点击事件,当点击子元素时往往触发的是父元素的点击事件,产生冲突,怎样解决这个问题呢?这就用到vue事件中的事件修饰符,官网地址https://cn.vuejs.org/v2/guide/events.html#%E4%BA%8B%E4%BB%B6%E4%BF%AE%E9%A5%B0%E7%AC%A6..
·
vue中父元素点击事件与子元素点击事件冲突
- 在做vue项目的时候,遇到子元素有点击事件,父元素也有点击事件,当点击子元素时往往触发的是父元素的点击事件,产生冲突,怎样解决这个问题呢?这就用到vue事件中的事件修饰符,官网地址https://cn.vuejs.org/v2/guide/events.html#%E4%BA%8B%E4%BB%B6%E4%BF%AE%E9%A5%B0%E7%AC%A6。
- Vue.js 为 v-on 提供了事件修饰符 .stop、.prevent、.capture、.self、.once、.passive,我们要处理子元素与父元素的事件冲突就要阻止事件传递的产生,而事件修饰符 .stop 的作用是阻止事件继续传播,那么我们需要在子元素的事件上添加事件修实符 .stop 来阻止事件传播。如下代码:
<!-- html -->
<li class="settingImgLi"
:class="{active:index==isActive}"
v-for="(image,index) in data.consultList"
:key="index"
<!--父元素事件-->
@click="handleCurrentItem(image,index)">
<div style="width:100%;height:100%;position: relative;overflow: hidden;">
<img width="100%" height="100%" :src="image.image" alt="">
<div class="img-item-selected">
<Icon type="md-checkmark" />
</div>
</div>
<!-- 子元素事件-->
<div class="img-item-close" @click.stop="removePic(index)">
<i class="el-icon-circle-close"></i>
</div>
</li>
<!-- js -->
handleCurrentItem(image, index) {
console.log("父元素")
},
removePic(index){
console.log("子元素")
},
- 事件修饰符
<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。(官网有介绍此段)
更多推荐
已为社区贡献1条内容
所有评论(0)