Firefoxはdocumentにclickイベントリスナーを登録すれば中・右クリックも捕捉できる

Firefoxのclickイベントは、イベントリスナーの登録先がdocumentか要素かによって、中・右クリックも捕捉するかどうかが変わる。

/* Firefox 3.6.13 */

document.addEventListener('click', function (e) {
  alert(e.button);
  /* 左クリック、中クリック、右クリック すべて拾う */
}, false);

document.body.addEventListener('click', function (e) {
  alert(e.button);
  /* 左クリックしか拾わない */
}, false);

他のブラウザではどうなるかも調べてみたけど、Firefoxのように登録ノードによって違いがでるブラウザはなかった。

document 要素ノード
IE8 × ×
Firefox 3.6 × ×
Chrome 8.0 × ×
Chrome 9.0 × × × ×
Opera 11.0 × × × ×
  • 要素ノードはdiv、a、input[type="button"]で試したが、これらのブラウザでは違いはなかった。
  • IE8は標準モードでもQuirksモードでも違いはなかった。
  • IE8はボタンの種類に関わらずevent.buttonは常に0だった。

mousedownイベントならどのブラウザでも3種類のクリックを補足でき、IE8のevent.buttonもボタンの種類によって違う値を返した(値は他のブラウザとは異なる*1)。

document 要素ノード
IE8
Firefox 3.6
Chrome 8.0
Opera 11.0
要素ノードの種類によっても挙動が変わるブラウザがあったらしい……。