【问题标题】:Event Capture in SVGSVG 中的事件捕获
【发布时间】:2016-08-10 23:52:11
【问题描述】:

我正在尝试捕获在 SVG 元素上触发的事件(在本例中为矩形)。但是,event 无法识别,我收到控制台错误:

ReferenceError: 事件未定义。

我在一个 HTML 元素上调用了相同的函数,它运行良好。是否有任何原因导致以下内容不适用于 SVG 元素?

代码如下:

<g class="piece filled" transform="translate(120, 0)">
  <!-- the following 'event' within 'playerMove' gives error -->
  <rect width="120" height="120" data-tile="1" onclick="playerMove(event)"/>
</g>

Javascript:

const playerMove = function( e ){ 
    console.log( e );
    let eTarget = e.target;
}    

编辑: 根据评论,这似乎是一个 Firefox 问题,有什么解决方法吗?它似乎在 Chrome 中工作。感谢 jessh 的提示。

【问题讨论】:

  • 此代码在隔离环境中工作 - codepen.io/jshawl/pen/XKogQa
  • 我刚刚在 FF 中尝试过,它也不起作用。然后我想他一定是在使用 Chrome,试过了,是的,它确实有效!所以,是FF。有什么解决办法吗?
  • @RobertLongson 不可能!你很准。但是,作为参数传递的相同 'evt' 不适用于 FF 中的 HTML 元素。在那里,event 似乎工作正常。你知道这是为什么吗?
  • 不同的规格,不同的规则。有一次尝试标准化,但它破坏了太多现有内容。

标签: javascript events svg dom-events


【解决方案1】:

将事件更改为 evt 以生成此事件:

<rect width="120" height="120" data-tile="1" onclick="playerMove(evt)"/>

【讨论】:

  • 谢谢,这行得通!但是,作为参数传递的相同 'evt' 不适用于 FF 中的 HTML 元素。在那里,event 似乎工作正常。你知道这是为什么吗?
  • 规格不同,规则不同。
  • @dandavis 你能详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多