MS Edge 无法检测<使用> SVG 元素的委托事件
MS Edge can't detect delegated events for <use> SVG elements?
我想我发现了MS Edge的一个令人不安的错误,它会影响动态创建的SVG <use>
元素。边缘似乎能够检测直接绑定的事件,即 $('.use').on('click', ...)
,但是委派的事件$('body').on('click', 'use', ...)
将被忽略。
它最容易用 JS Fiddle 来说明(在 Chrome 中测试,其中绑定都有效,而在 Edge 中委托绑定不起作用):
https://jsfiddle.net/Lr0arahb/
有没有人对这个问题有任何见解,并知道可能的解决方法?最重要的是,我正在寻找一种解决方案,我们仍然可以使用<use>
元素,因为这对于我们的 SPA 至关重要。
我也在 Edge 13 中找到了这一点。这绝对是一个黑客而不是一个可靠的解决方案,但为了解决这个问题,我将 SVG 放在一个容器中,并使用一个透明的伪元素来覆盖 SVG。这样,伪元素获得点击而不是 SVG。
按钮中使用的 SVG 图标示例:
<button class="close" type="button">
<svg role="img" class="icon icon--close">
<use xlink:href="icons.svg#close" />
</svg>
</button>
CSS修复:
.close {
/* Make it so the pseudo-element is relative to this parent element */
position: relative;
}
.close:after {
/* Cover the button with a pseudo-element so the SVG can't be clicked */
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
可以使用伪元素:before
或:after
伪元素。
使用pointer-events: none
可以解决这个问题。如果将pointer-events: none
添加到<use>
本身,则不会像注释中提到的那样将其应用于 <svg>
标记并将处理程序附加到容器元素,这会阻止它停止事件传播,并且外部<svg>
仍然可以接受鼠标事件。
相关文章:
- 锚点元素不't使用svg时,请打开EDGE上的href
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 在select元素中显示highchart dashstyle(svg)
- 如何自动保存动态生成的HTML SVG元素
- 使用svg和javascript将一个类的元素动画化为另一个类
- 将包含SVG元素的HTML转换为图像文件
- SVG元素——处理和选择文本
- 更改SVG'style'元素
- SVG元素在转换后会丢失事件侦听器
- 获取以屏幕像素为单位的旋转SVG元素的边界
- 使用JavaScript查找具有特定属性的SVG元素
- 如何使用正则表达式按类获取svg元素
- d3与svg在处理元素时的对比
- 是否可以在不创建svg对象的情况下创建捕捉元素?[snap.svg]
- 将SVG元素拖动到另一个SVG元素上
- 捕捉.svg — 单击其中一个元素时删除对象
- 单击事件在替换<使用>元素在<svg>(Win7/IE11)
- 我想隐藏/显示我的SVG元素,同时在anguarJS中使用它
- 在元素 SVG 中使用 JavaScript 或 jQuery 进行事件单击
- 是否有一种方法可以使用Javascript合并两个路径元素(svg)