k8o

<dialog>要素を閉じるように要求するrequestClose

HTMLDialogElementのrequestCloseメソッドは<dialog>要素を閉じるように要求します。「要求」とは、closeメソッドのように即座に閉じるのではなく、猶予を与えてから閉じさせます。閉じる処理を条件付きで制御することで、対話中の状態の保持が可能になり、より良いUXの提供が可能になります。

公開: 2025年5月28日(水)
更新: 2025年5月28日(水)
閲覧数145 views

HTMLDialogElement.requestClose

Firefox 139でHTMLDialogElementrequestCloseメソッドが実装され、Baseline 2025に仲間入りしました。

requestCloseメソッドは、<dialog>要素を閉じるように要求します。 「要求」と記述した通り、即座にダイアログを閉じるのではなく、cancelイベントを介して、closeイベントを発火させます(既存のcloseメソッドはcloseイベントを呼ぶだけです)。

この時の動作は<dialog>要素を開いた状態で、Escapeキーを押した時と同じです。

cancelイベントをcloseイベントに挟むことで、ダイアログを閉じる前に何らかの処理を行うことができます。

たとえば、cancelイベント中でpreventDefaultメソッドを呼ぶことで、ダイアログを閉じるのをキャンセルすることも可能です。

使用例

下の例は、ダイアログ内のフォームに入力中のテキストがあれば、「閉じる」ボタンやEscapeキーでダイアログを閉じれないように実装しています。

requestCloseの例

Escapeキーを押した時も同じように動作するはずですが、少なくとも私の環境(Chrome 136)では、cancelイベントが発火した後のEscapeキーの押下では、ダイアログが閉じませんでした(理由は不明)。

returnValue

closeメソッド同様に、requestCloseメソッドの引数に文字列を渡せます。 <dialog>要素のプロパティreturnValueを更新します。

const requestClose = () => {
  dialogElement.requestClose('some value');
};

dialogElement.addEventListener('close', (e) => {
  // requestCloseを呼び出した後であればreturnValueは'some value'になる
  console.log(
    'Dialog closed with returnValue:',
    dialogElement.returnValue,
  );
});

まとめ

requestCloseメソッドの登場により、<dialog>要素はさらにインタラクティブで使いやすくなりました。requestClosecancelイベントを活用して、より質の高いダイアログ体験を構築しましょう。

この記事はどうでしたか?

500文字以内でご記入ください

ブログの購読

k8oのブログを購読する

k8oのブログを購読することで、最新の情報を受け取ることができます。

登録いただいたメールアドレスは、購読のためにのみ使用されます。