【问题标题】:Get element where Event is binded获取绑定事件的元素
【发布时间】:2017-08-29 10:15:09
【问题描述】:

我正在使用 Vue 中的 @click 属性将事件绑定到元素(它的行为与 javascript .onclick 属性相同)。

我遇到的问题是,当通过从子 DOM 节点传播单击事件来调用事件时,我将子 DOM 元素作为target 属性,我找不到干净的方法(不搜索父母,如该元素可能嵌套在内部深处)以访问事件在事件回调中注册到的 DOM 元素。

<td @click="onCellClick($event)">
  <div class="text">
    <span>default</span>
  </div>
</td>

【问题讨论】:

  • 尝试使用this
  • 当我使用this时,我得到了Vue实例,因为它位于vuejs组件中

标签: javascript html vue.js


【解决方案1】:

我认为混淆在于事件的target vs currentTarget

event.target 是触发事件调度程序触发的内容,而 event.currentTarget 是您分配监听器的内容。

Vue.component('cell', {
  template: '#cell',
  methods: {
    onCellClick: function (e) {
      console.log(e.currentTarget)
    }
  }
});

【讨论】:

  • 就是这样,让我感到困惑的是,当我记录事件时currentTarget 为空。但它在回调中可用,所以效果很好。谢谢。
【解决方案2】:

你可以使用refs:

<td @click="onCellClick($event)" ref="cell1">
  <div class="text">
    <span>default</span>
  </div>
</td>

onCellClick(evt){
   console.log(this.$refs.cell1)
}

【讨论】:

  • 我也想过这个,但是当使用v-for作为列表或网格时,这会成为一个问题。
  • 您可以通过使用引用名称的索引并将索引发送到函数来克服它,然后您可以这样调用它:this.$refs[index]
猜你喜欢
  • 1970-01-01
  • 2015-04-05
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
相关资源
最近更新 更多