--- title: 'Element: click イベント' slug: Web/API/Element/click_event tags: - API - DOM - Element - Event - Interface - MouseEvent - NeedsBrowserCompatibility - NeedsMobileBrowserCompatibility - Reference - UI - click - events - mouse - イベント - インターフェイス - マウス translation_of: Web/API/Element/click_event ---
click
イベントは、ポインターが要素の中にある状態で、ポインティングデバイスのボタン (マウスの第一ボタンなど) が押されて離されたときに要素に送られます。
バブリング | あり |
---|---|
キャンセル | 可 |
インターフェイス | {{domxref("MouseEvent")}} |
イベントハンドラープロパティ | {{domxref("GlobalEventHandlers.onclick", "onclick")}} |
ボタンが要素上で押された後、離される前に要素の外側に移動した場合は、イベントは両方の要素を含む最も近い祖先要素で発生します。
click
は {{event("mousedown")}} および {{event("mouseup")}} イベントの後に、順番通りに発生します。
click
のイベントハンドラーに渡される {{domxref("MouseEvent")}} オブジェクトの {{domxref("Event.detail", "detail")}} プロパティには、 {{domxref("Event.target", "target")}} がクリックされた回数が設定されています。言い換えれば、ダブルクリックの場合は detail
が 2 になり、トリプルクリックの場合は 3 になります。このカウンターは、クリックが発生しない短い間隔の後にリセットされます。この間隔の長さの詳細は、ブラウザーやプラットフォームによって異なります。この間隔は、ユーザーの設定によっても影響を受ける可能性があります。例えば、アクセシビリティのオプションは、適応性のあるインターフェイスで複数回のクリックを簡単に実行できるように、この間隔を延長することができます。
Internet Explorer 8 と 9 は、 {{cssxref("background-color")}} の計算値が transparent
である要素が他の要素の上に重なった時、 click
イベントを受け取らないというバグに悩まされていました。すべての click
イベントはその下にある要素で発生していました。このライブサンプルを参照してください。
このバグの知られている回避方法は以下の通りです。
: rgba(0,0,0,0)
に設定する: 0
に設定し、 {{cssxref("background-color")}} を明示的に transparent
以外に設定するfilter: alpha(opacity=0);
に設定し、 {{cssxref("background-color")}} を明示的に transparent
以外に設定するSafari Mobile 7.0 以降では (おそらくそれ以前のバージョンも) 悩ましいバグがあり、通常は対話型ではない要素 ({{HTMLElement("div")}} など) で、イベントリスナーが要素自身に直接設定されていない場合 (つまり、 イベントの委譲が使用されている場合) に click
イベントが発生しません。デモはこのライブ例を参照してください。 Safari's docs on making elements clickable および definition of "clickable element" も参照してください。
このバグの知られている回避策は以下のとおりです。
: pointer;
を設定する。onclick="void(0)"
属性を設定する。click
イベントの委譲の使用をやめる。Safari Mobile は以下の要素を通常対話型であるとみなします (したがって、このバグの影響を受けません)。
href
があるものに限る)href
があるものに限る)この例は {{HtmlElement("button")}} を連続してクリックした数を表示します。
<button>Click</button>
const button = document.querySelector('button'); button.addEventListener('click', event => { button.innerHTML = `Click count: ${event.detail}`; });
高速にするために、繰り返してボタンをクリックするとクリックカウントを増加させます。クリック間に休みが入った場合は、カウントがリセットされます。
{{EmbedLiveSample("Examples")}}
仕様書 | 状態 |
---|---|
{{SpecName('UI Events', '#event-type-click')}} | {{Spec2('UI Events')}} |
{{SpecName('DOM3 Events', '#event-type-click', 'click')}} | {{Spec2('DOM3 Events')}} |
{{SpecName('DOM2 Events', '#Events-eventgroupings-mouseevents-h3', 'click')}} | {{Spec2('DOM2 Events')}} |
{{Compat("api.Element.click_event")}}