<dialog> - ダイアログ

目次

概要

形式
<dialog></dialog>
サポート
https://caniuse.com/dialog
カテゴリ
フローコンテンツ
セクショニングルート
親要素
フローコンテンツ を子要素に持てるもの
子要素
フローコンテンツ
タグの省略
開始タグ:必須 / 終了タグ:必須
属性
グローバル属性
open
closedby

説明

<dialog> はダイアログを表示します。JavaScript でダイアログの表示・クローズを制御することが可能です。show() は通常モードでダイアログを表示します。showModal() はモーダル状態(ダイアログ以外の操作が禁止される)でダイアログを開きます。close() はダイアログを閉じます。close() の引数は、ダイアログの onclose イベントハンドラの this.returnValue で参照することができます。

HTML Living Standard、HTML 5.2 で追加され、Chrome 37、Opera 24 以降でサポートされています。

属性

グローバル属性
詳細は グローバル属性 を参照してください。
open
LS/H5.2
最初にダイアログを表示した状態で開きます。
closedby
LS
ダイアログを閉じる方法を指定します。2025年3月の Chrome 134 でサポートされました。(サポート状況(↗))

使用例

基本的なサンプル

HTML
<input type="button" value="Show" onclick="document.getElementById('dg1').show()">
<input type="button" value="ShowModal" onclick="document.getElementById('dg1').showModal()">
<dialog id="dg1">
  <p>Hello!</p>
  <input type="button" value="Close" onclick="document.getElementById('dg1').close()">
</dialog>
表示

Hello!

ダイアログに入力した値を受け取る

ダイアログに入力した値を受け取るには、下記の様に close() の引数で値を渡し、これを e.target.returnValue で受け取ります。

HTML
<script>
window.addEventListener('load', function() {
  var dialog2 = document.getElementById('dialog2');
  var open2 = document.getElementById('open2');
  var text2 = document.getElementById('text2');
  var close2 = document.getElementById('close2');
  open2.addEventListener('click', () => {
    dialog2.showModal();
  });
  close2.addEventListener('click', () => {
    dialog2.close(text2.value);
  });
  dialog2.addEventListener('close', (e) => {
    alert(e.target.returnValue);
  });
});
</script>
<input type="button" id="open2" value="Open">
<dialog id="dialog2">
  <input type="text" id="text2" value="Hello">
  <input type="button" id="close2" value="Close">
</dialog>
表示

closedby属性の使い方

2025年3月の Chrome 134 で closedby 属性がサポートされました。

HTML
<dialog id="dlg-any" closedby="any">
  <p>Any dialog</p>
  <button class="close3">Close</button>
</dialog>
<dialog id="dlg-closerequest" closedby="closerequest">
  <p>CloseRequest Dialog</p>
  <button class="close3">Close</button>
</dialog>
<dialog id="dlg-none" closedby="none">
  <p>None Dialog</p>
  <button class="close3">Close</button>
</dialog>
<button type="button" class="btn3" data-target="dlg-any">any</button>
<button type="button" class="btn3" data-target="dlg-closerequest">closerequest</button>
<button type="button" class="btn3" data-target="dlg-none">none</button>
JavaScript
document.querySelectorAll(".btn3").forEach((e) => {
  e.addEventListener("click", (e) => {
    document.getElementById(e.target.getAttribute("data-target")).showModal();
  });
});
document.querySelectorAll(".close3").forEach((e) => {
  e.addEventListener("click", (e) => {
    console.log(e.target.parentElement);
    e.target.parentElement.close();
  });
});
表示

Any dialog

CloseRequest Dialog

None Dialog