Jquery/Javascript—在IE上单击SVG时,检测元素外部的单击失败
正如我在网上看到的众多版本的答案一样,当单击svg时,它们都可以在chrome/firefox上工作,但不能在IE上工作,例如以下代码片段:Jquery/Javascript—在IE上单击SVG时,检测元素外部的单击失败,javascript,jquery,html,svg,Javascript,Jquery,Html,Svg,正如我在网上看到的众多版本的答案一样,当单击svg时,它们都可以在chrome/firefox上工作,但不能在IE上工作,例如以下代码片段: $(document).on("click",(e) => { this._handleDocumentClick(e); }); _handleDocumentClick(e) { let container = $(".myClass"); if (container.has(e.target).length ===
$(document).on("click",(e) => {
this._handleDocumentClick(e);
});
_handleDocumentClick(e) {
let container = $(".myClass");
if (container.has(e.target).length === 0) {
alert('clicked outside');
}
}
在IE上,如果单击SVG(可能也在图像上),SVG在我的元素内部,但它仍然认为它在外部,那么这将失败
这是我打印e.target时显示的元素(及其长度):
有什么想法吗?这里有一种稍微不同的方法,使用jQuery的
.closest()
方法检查目标元素是否是容器的子元素:
var $container = $('.target');
$('body').on('click', function(evt) {
var $target = $(evt.target);
if ( $target.closest($container).length ) {
console.log('❌ click inside');
}
else {
console.log('✅ click outside');
}
});
这是一个在IE9中测试的演示+
答案是对应的SeeElement属性: 仅在ie中:
如果
e.target.correspondingUseElement!='未定义的“
我不确定是否有
是正确的函数。。e.target
真的是IE中的一个字符串还是一个元素?@Alex在chrome/firefox上工作得很好,还有另一个与for循环完全相同的选项。e.target是一个元素,我理解:)但这并不能回答我的问题。另外,ie是否支持您的语法(es6?)?如果(!document.querySelector('.myClass').contains(e.target){alert(''clicked outside'),请尝试vanilla js:
因此,我尝试了您的示例,但仍然失败,原因是我认为,因为我使用的是svg as:,并且使用对象超出了范围。在ie中找到了答案,您应该使用e.target.correspondingUseElement: