Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery/Javascript—在IE上单击SVG时,检测元素外部的单击失败_Javascript_Jquery_Html_Svg - Fatal编程技术网

Jquery/Javascript—在IE上单击SVG时,检测元素外部的单击失败

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 ===

正如我在网上看到的众多版本的答案一样,当单击svg时,它们都可以在chrome/firefox上工作,但不能在IE上工作,例如以下代码片段:

$(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: