2016-11-21 88 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

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