2017-03-31 13 views
1

Firefoxをマウスで右クリックするとaddEventListenerがトリガーされたことに気付きました。Firefoxをマウスで右クリックすると、クリックイベントが発生する

このコードをもっと多くのブラウザやOS(IE 11-10-9、Safari、Chrome)で試してみました。マウスを右クリックすると、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')でキャプチャされます。そうでない場合は、右クリックするといくつかのオプション(ブラウザごとに異なるウィンドウが開きます)が表示されます。

documentオブジェクトにaddEventListener('click')を追加すると、ドキュメント上でマウスクリックイベント(左、右、ホイール)がすべてキャプチャされ、this右クリックの動作が無効になります。ポインティング:あなたはdocumentオブジェクト

クリックにリスナーを追加するまで(ANYボタン)ものが活性化されていないが、また

が、これは、Mozilla documentationマウスイベントセクションで述べているものですデバイスボタン(ANYボタン、すぐにプライマリボタンのみ)がエレメント上で押されてリリースされました。

*注:まだ上記のウィンドウは、あなたがではなく、シングルクリックで、マウスの右ボタンをダブルクリックしたときに表示されます。

関連する問題