Vue: 用v-on绑定事件是否有方法获取到触发的this对象

Created on 10 Dec 2015  ·  9Comments  ·  Source: vuejs/vue

首先我知道可以用e.target获取到点击到的元素
但有这么一种情况:<a @click="foo" data-id="2015"><i>修饰文本</i>主要文本内容</a>
在这种情况下我点击到了<i>标签同样会触发事件,但是我的e.target获取到的就是<i>
有没有那么一种方法,可以让我像原生绑定的时候一样,可以直接用this.dataset.id获取到我想要的那个

我目前的解决思路有两种:
1.给<i>标签添加pointer-events:none样式
2.给<i>标签同样绑上data-id属性

希望得到更好的解决方案

Most helpful comment

因为等你展开 log 出来的事件对象的时候时候它已经冒泡完毕了,自然就没有 currentTarget 了。

All 9 comments

e.currentTarget...

@yyx990803 根据我的测试,不论是点击<i>还是<a>,得到的e.currentTarget都是null

那得给重现

仔细研究了一下,之前是console.log(e),直接看e里面的currentTargetnull,直接console.log(e.currentTarget)居然就有值了……不管是火狐44还是谷歌49都是这样,我也是无语了。

不过问题还是解决了,谢谢

因为等你展开 log 出来的事件对象的时候时候它已经冒泡完毕了,自然就没有 currentTarget 了。

@yyx990803 厉害了我的哥。终于知道为什么log不出来了

试试console.dir()

我遇到的一种情况,踩坑了

del (event) {
        let currentTargetDom = event.currentTarget; // 暂存起来
        layer.open({
            className: 'layer-confirm',
            content: '确定删除吗?',
            btn: ['删除', '取消'],
            yes: () => {
                console.log(event)
                console.log(event.currentTarget); // 注意,在某个回调中才获取,冒泡完毕,也是 null
                console.log(currentTargetDom ); // 这样可以得到
            }
        })
}

log不出来确实好恶心。。。。

Was this page helpful?
0 / 5 - 0 ratings