2016-11-21 87 views
3

正如答案我在网上看到了很多版本时,在IE浏览器出现故障时,他们都对铬/ Firefox的工作,但不能在IE浏览器上的SVG点击时,例如这片段:jQuery的/ JavaScript的 - 检测点击之外的元素点击的SVG

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

enter image description here

任何想法?

+0

我不知道,如果'has'是去用正确的功能..是'e.target'真的在IE的字符串或者也许一个元素? – Alex

+0

@Alex在Chrome/Firefox上有很好的效果,for循环有另一种选择,它的作用完全相同。e.target是一个元素 – omriman12

+0

ive明白:)但这不能回答我的问题。也是,即支持你的语法(es6?)? – Alex

回答

1

这里有一个稍微不同的方法,检查是否目标元素是使用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测试+ http://jsbin.com/qoqume/edit?html,js,console,output

+0

所以我想你的榜样,它仍然失败,则!原因是我认为,因为我使用的svg为:和USE对象超出范围。 – omriman12

+0

找到了答案,在ie你应该e.target.correspondingUseElement:https://msdn.microsoft .com/en-us/library/ff971929(v = vs.85).aspx – omriman12

+0

啊,好吧,很高兴知道! –