<dialog>要素を閉じるように要求するrequestClose
HTMLDialogElementのrequestCloseメソッドは<dialog>要素を閉じるように要求します。「要求」とは、closeメソッドのように即座に閉じるのではなく、猶予を与えてから閉じさせます。閉じる処理を条件付きで制御することで、対話中の状態の保持が可能になり、より良いUXの提供が可能になります。
HTMLDialogElement.requestClose
Firefox 139でHTMLDialogElement
のrequestClose
メソッドが実装され、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>
要素はさらにインタラクティブで使いやすくなりました。requestClose
とcancel
イベントを活用して、より質の高いダイアログ体験を構築しましょう。