2017-03-31 107 views
1

我注意到,鼠標右鍵點擊火狐引發的addEventListener。鼠標右鍵點擊Firefox的觸發click事件

我試圖上更多的瀏覽器和多OS(IE 11-10-9,Safari瀏覽器,瀏覽器),並通過按下鼠標此代碼右擊,僅在Firefox總是打印的console.log消息。

<div id="one-div" style="height:400px;width:500px;background-color:#000;"> click me </div> 
<script> 
    function cb(event, from){ 
     // if click is fired on <div> with: 
     // left click, both EventListener will be printed. 
     // right click, only the 'document' one will be printed. 
     event.preventDefault(); 
     console.log(event + ' from: ' + from); 
    } 
    document.addEventListener('click', function(e){ 
     cb(e,'document'); 
    }, false); 
    document.getElementById("one-div").addEventListener('click', function(e){ 
     cb(e,'one-div'); 
    }, false); 
</script> 

而且我注意到,當點擊觸發div時,它只會觸發document.addEventListener。 我搜索在Firefox更新日誌,但沒有這方面的消息。

任何人都可以解釋這種行爲嗎? 謝謝!

回答

2

默認情況下,在所有瀏覽器中右鍵單擊事件被 addEventListener('contextmenu')捕獲,否則右鍵單擊將打開一個窗口並帶有一些選項(每個瀏覽器都有不同的選項)。

在Firefox中,當您添加addEventListener('click')document對象,它會捕捉該文件的任何鼠標點擊事件(左,右,滾輪),它會禁用this正確的點擊行爲。

此外,這是Mozilla documentation說,在鼠標事件部分,雖然直到你的監聽器添加到document對象

點擊(任意鍵)東西沒有被激活:一個指向設備按鈕(ANY按鈕;即將主按鈕只)已被按下並在元件上釋放。

*注:還是當你雙擊鼠標右鍵,顯示在上面的窗口,而不是一個單一的點擊。