2017-03-31 69 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按钮;即将主按钮只)已被按下并在元件上释放。

*注:还是当你双击鼠标右键,显示在上面的窗口,而不是一个单一的点击。