给父元素绑定@click后,怎么防止子元素调用@click的方法呢?

新手上路,请多包涵

如代码:

<!-- html -->
<a @click="changeColor()">
    <span>123</span>
</a>
<script>
    ....
    methods:{
        changeColor:function(e){
            $(e.target).addClass(select);
            修改a标签的背景颜色
        }
    }
</script>

以上代码运行起来,点击后 子元素span也会运行changeColor()方法并添加class-"select",除非span没有覆盖完父元素a标签.请问怎么使点击后只会使a标签添加select

阅读 5k
7 个回答
<a>
  <span @click.stop></span>
</a>

e.target找到的事件的目标对象,事件代理才用

e.currentTarget.addClass(select);

测试可行

$(e.currentTarget).addClass(select);

我用.stop没效果,也不知道为啥,最后是在span上绑了一个方法,传的$event进去,然后写的$event.stopPropagation();阻止事件冒泡,然后就可以了

<span @click.stop="children">123</span>

阻止事件冒泡就好啦。.stop

<!-- 阻止单击事件继续传播 -->

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题