vue父元素点击事件与子元素点击事件冲突问题

 更新时间:2023年01月22日 10:39:25   作者:前端韭菜  
这篇文章主要介绍了vue父元素点击事件与子元素点击事件冲突问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

父元素点击事件与子元素点击事件冲突

在做vue项目的时候,遇到子元素有点击事件,父元素也有点击事件,当点击子元素时往往触发的是父元素的点击事件,产生冲突,怎样解决这个问题呢?

这就用到vue事件中的事件修饰符,官网地址

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 只会阻止对元素自身的点击。(官网有介绍此段)

vue点击事件(父子层级元素点击时踩坑记录)

<ul>
    <li @click="fatherClick">
        <div @click.stop="childClick">
        </div>
    </li>
</ul>
var vm_target = new Vue({
                el: '#vm_target',
                data: {
 
                },
                methods:{
                    /**父元素点击事件**/
                    fatherClick:function(event){
                        var el1 = event.currentTarget;
                                var el2 = event.target;
                    },<br>              childClick:function(event){ <br>                   <br>              }
                     
                },
                created:function(){
                     
                }
                 
            });   

在JS中,event.currentTarget获取到的是click事件绑定的DOM对象,event.target获取到的为当前所点击的DOM对象。

若绑定了一个父级元素后,点击子元素时,会触发父元素的点击事件,若需要点击子元素时不触发父元素事件

有两种方法:

1、在父元素中判断event.currentTarget == event.target是否为true

editTarget:function(event){
       var el1 = event.currentTarget;
       var el2 = event.target;
       if(el1 == el2){
          //do something
       }  
}

2、在子元素中,绑定一个阻止冒泡的点击事件 @click.stop

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • iphone刘海屏页面适配方法

    iphone刘海屏页面适配方法

    这篇文章主要介绍了iphone刘海屏页面适配方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 详解vuex中的this.$store.dispatch方法

    详解vuex中的this.$store.dispatch方法

    这篇文章主要介绍了vuex中的this.$store.dispatch方法,必须要用commit(‘SET_TOKEN’, tokenV)调用mutations里的方法,才能在store存储成功,需要的朋友可以参考下
    2022-11-11
  • Vue移动端实现调用相机扫描二维码或条形码的全过程

    Vue移动端实现调用相机扫描二维码或条形码的全过程

    最近在使用vue开发的h5移动端想要实现一个调用摄像头扫描二维码的功能,所以下面这篇文章主要给大家介绍了关于Vue移动端实现调用相机扫描二维码或条形码的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • vue实现右上角时间显示实时刷新

    vue实现右上角时间显示实时刷新

    这篇文章主要为大家详细介绍了vue实现右上角时间显示实时刷新,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • vue3 Table分页保留选中状态代码示例

    vue3 Table分页保留选中状态代码示例

    这篇文章主要给大家介绍了关于vue3 Table分页保留选中状态的相关资料,vue table组件是一个非常方便的表格组件,它可以帮助我们实现分页和选中功能,需要的朋友可以参考下
    2023-08-08
  • Vue项目使用svg图标实践

    Vue项目使用svg图标实践

    这篇文章主要介绍了Vue项目使用svg图标实践,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 一篇文章带你吃透Vue生命周期(结合案例通俗易懂)

    一篇文章带你吃透Vue生命周期(结合案例通俗易懂)

    这篇文章主要给大家介绍了关于如何通过一篇文章带你吃透Vue生命周期,文章通过结合案例更加的通俗易懂,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • 加载 vue 远程代码的组件实例详解

    加载 vue 远程代码的组件实例详解

    vue-cli 作为 Vue 官方推荐的项目构建脚手架,它提供了开发过程中常用的,热重载,构建,调试,单元测试,代码检测等功能。我们本次的异步远端组件将基于 vue-cli 开发
    2017-11-11
  • vue单页面如何解决多个视频同时仅能播放一个问题

    vue单页面如何解决多个视频同时仅能播放一个问题

    这篇文章主要介绍了vue单页面如何解决多个视频同时仅能播放一个问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue2.0数据双向绑定与表单bootstrap+vue组件

    vue2.0数据双向绑定与表单bootstrap+vue组件

    这篇文章主要介绍了vue2.0数据双向绑定与表单bootstrap+vue组件,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02

最新评论