HTML タグの oncontextmenu 属性には、要素上でマウスの右ボタンをクリックしたときに実行する JavaScript を指定する。
HTMLでコンテキストメニューのイベントハンドラを指定する。
<tag oncontextmenu="javascript">
oncontextmenu属性で関数を呼び出す場合、第1引数にイベント・オブジェクトを渡すことができる。
<tag oncontextmenu="func(arguments[0])">
oncontextmenu属性で関数を呼び出す場合、第2引数にエレメント・オブジェクトを渡すことができる。
<tag oncontextmenu="func(arguments[0], this)">
JavaScriptでコンテキストメニューのイベントハンドラを指定する。
object.oncontextmenu = function(){ script };
object.addEventListener("contextmenu", script);
jQueryでコンテキストメニューのイベントハンドラを指定する。
window.jQuery(expr).on("contextmenu", function([event]){ script });
jQuery(expr).on("contextmenu", function([event]){ script });
$(expr).on("contextmenu", function([event]){ script });
<p oncontextmenu="alert('右クリックされました。');">
ここを右クリックしてください。
</p>
上記の実行結果を次に示す。
ここを右クリックしてください。
次に示すイベント・ハンドラ・コンテンツ属性は、任意のHTML要素に指定することができる。
contextmenuイベントはバブリング(下位の要素から上位の要素へ伝播)する。
HTMLが次に示す構造である場合、input要素で発生したcontextmenuイベントは、fieldset、form、body及びhtml要素へと伝播していく。
もしfieldset、form、body及びhtml要素にoncontextmenu属性を指定した場合、それらのJavaScriptも実行される。
contextmenuイベントはキャンセル可能である。contextmenuイベントをキャンセルすると、コンテキストメニュー表示等のデフォルト動作が行われなくなる。
イベントをキャンセルするには、イベントオブジェクトの preventDefault メソッドを使う。
画像を右クリックしてもコンテキストメニューを表示させない例を次に示す。
<img src="/images/portrait.jpg" oncontextmenu="cancelEvent(arguments[0]);" alt="portrait">
<script>
function cancelEvent(event) {
event.preventDefault()
}
</script>
上記HTMLの実行結果を次に示す。
contextmenuイベントは PointerEventインタフェースを実装している。
PointerEventインタフェースは次に示すプロパティを持つ。
値 | 説明 |
---|---|
mouse | マウス |
pen | 電子ペン |
touch | タッチパネル |
Web Hypertext Application Technology Working Group (2022) "Web application APIs" HTML Living Standard
World Wide Web Consortium (2021) UI Events