【问题标题】:How to check if bubbling triggered a click in vue? [duplicate]如何检查冒泡是否触发了vue中的点击? [复制]
【发布时间】:2020-03-11 21:33:07
【问题描述】:

假设我在 vue 中有这个模板:

<p @click="handleParagraphClick">
    <span @click="handleSpanClick">Some text</span>
</p>

当我点击跨度时,我还会触发一个段落点击处理程序运行。 jquery有这样的检查来检查冒泡是否触发了点击:

$('#id_of_p').click(function(event) {
    if (event.target == this) {
        // event was triggered on the body
    }
});

当我在 handleParagraphClick(event) 中使用 event.target 时,我得到了对 span 元素的引用。如何获取段落参考以比较跨度event.target 和段落this 变量,如jquery?

更新。

上面的模板是我当前代码的简化版本。我有嵌套组件。带跨度的组件在段落组件中呈现。

【问题讨论】:

  • 如果你能得到这些信息,你想做什么?如果您想确保handleParagraphClick 仅在点击&lt;p&gt; 时执行,您可以使用@click.self="handleParagraphClick"
  • @Phil,我忘记了“self”事件修饰符。所以,是的,它应该可以帮助我解决我的问题。谢谢!

标签: vue.js event-bubbling


【解决方案1】:

您可以使用event.currentTarget 来获取带有点击事件的元素。作为参考,我找到了答案here

这可能不是你需要的,但如果你不想在点击 span 时触发 handleParagraphClick,你可以使用@click.stop

new Vue({
  el: "#app",
  methods: {
    onPClick: function(ev) {
      console.log("Current Target: " + ev.currentTarget);
      console.log("Target: " + ev.target);
    }
  }
});
p {
  padding: 10px;
  background: red;
}

span {
  padding: 5px;
  background: yellow;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <p @click="onPClick">
    P
    <span>
SPAN
</span>
  </p>

</div>

【讨论】:

  • 我看到currentTarget: null。但我有嵌套组件。具有跨度的组件在段落组件内呈现。也许这就是currentTarget 为空的原因。
  • 嗯,好的,它在简单的小提琴场景中工作正常。在做了一些研究之后,似乎有几个原因它可能为空,可能值得一试vue-forumGitHub
  • onPClick 可能需要为 onPClick($event)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2016-08-05
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多