このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

HTMLButtonElement: popoverTargetAction プロパティ

Baseline 2024
Newly available

Since ⁨April 2024⁩, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

popoverTargetActionHTMLButtonElement インターフェイスのプロパティで、この制御ボタンで制御されるポップオーバー要素で実行されるアクション("hide""show""toggle" の何れか)を取得および設定します。

これは HTML の popovertargetaction 属性の値を反映します。

列挙値です。取りうる値は次の通りです。

"hide"

このボタンは表示中のポップオーバーを非表示にします。すでに非表示のポップオーバーを非表示にしようとした場合は、何も行われません。

"show"

このボタンは非表示のポップオーバーを表示します。すでに表示中のポップオーバーを表示させようとした場合は、何も行われません。

"toggle"

このボタンはポップオーバーを表示と非表示の間でトグル切り替えします。ポップオーバーが非表示の場合は、表示されます。ポップオーバーが表示中の場合は、非表示になります。popoverTargetAction が設定されていない場合、"toggle" がこの制御ボタンで行われる既定のアクションになります。

自動ポップオーバーにおけるポップオーバーの切り替え

この例では、 popoverTargetAction プロパティに "toggle" 値を設定したポップオーバー API の基本的な使用例を示します。 popover 属性は "auto" に設定されているので、ポップオーバーはポップオーバー領域の外側をクリックすることで閉じることができます("light-dismissed")。

最初にポップオーバーの表示・非表示に使用する HTML 要素 <button> とポップオーバーになる <div> を定義します。 この阿合、popovertargetaction 属性を <button> を設定したり、popover 属性を <div> に設定したりはしません。プログラム的に行うからです。

html
<button id="toggleBtn">ポップオーバーのトグル切り替え</button> <div id="mypopover">これはポップオーバーの内容です。</div> 

JavaScript コードは最初に <div><button> 要素のハンドルを取得します。 そして、ポップオーバーに対応しているかどうかを調べる関数を定義します。

js
const popover = document.getElementById("mypopover"); const toggleBtn = document.getElementById("toggleBtn"); // ポップオーバー API に対応しているか確認 function supportsPopover() { return HTMLElement.prototype.hasOwnProperty("popover"); } 

ポップオーバー API に対応している場合、コードは <div> 要素の popover 属性を "auto" に設定し、それをトグルボタンのポップオーバー対象とします。 そして <button>popoverTargetAction"toggle" に設定します。 ポップオーバー API に対応していない場合は、<div> 要素のテキストコンテンツを変更してその旨を記述し、トグルボタンを非表示にします。

js
if (supportsPopover()) { // <div> 要素を自動ポップオーバーに設定 popover.popover = "auto"; // ボタンのターゲットをこのポップオーバーに設定 toggleBtn.popoverTargetElement = popover; // ボタンがポップオーバーの表示を切り替えるように設定する toggleBtn.popoverTargetAction = "toggle"; } else { popover.textContent = "ポップオーバー API に対応していません。"; toggleBtn.hidden = true; } 

メモ: ポップオーバー要素は既定で非表示になりますが、要素が API に対応していない場合は「通常通り」表示されます。

下記の例を試してみてください。 ボタンを押すたびにポップオーバーを表示させたり非表示にしたりできます。 "auto" ポップオーバーはポップオーバーテキストの範囲外を選択することで「簡単な解除」をすることもできます。

手動ポップオーバーにおけるポップオーバーの表示・非表示操作

この例では popoverTargetAction 属性の "show""hide" の値を使用する方法を示します。

コードは前回の例とほぼ同じですが、2 つの <button> 要素があり、ポップオーバーが "manual" に設定されている点が異なります。 manual ポップオーバーは明示的に閉じなければならず、ポップオーバー領域の外側を選択することで「簡単な解除」することはできません。

html
<button id="showBtn">ポップオーバーを表示</button> <button id="hideBtn">ポップオーバーを非表示</button> <div id="mypopover">これはポップオーバーの内容です。</div> 
js
function supportsPopover() { return HTMLElement.prototype.hasOwnProperty("popover"); } const popover = document.getElementById("mypopover"); const showBtn = document.getElementById("showBtn"); const hideBtn = document.getElementById("hideBtn"); const popoverSupported = supportsPopover(); if (supportsPopover()) { // <div> 要素を手動ポップオーバーに設定 popover.popover = "manual"; // ボタンのターゲットをこのポップオーバーに設定 showBtn.popoverTargetElement = popover; hideBtn.popoverTargetElement = popover; // ターゲットの操作を表示/非表示とする showBtn.popoverTargetAction = "show"; hideBtn.popoverTargetAction = "hide"; } else { popover.textContent = "ポップオーバー API に対応していません。"; showBtn.hidden = true; hideBtn.hidden = true; } 

ポップオーバーは、「ポップオーバーを表示」ボタンを選択することで表示させ、「ポップオーバーを隠す」ボタンを使用することで解除することができます。

仕様書

Specification
HTML
# dom-popovertargetaction

ブラウザーの互換性

関連情報