Ce face <dialog closedby>
Atributul closedby de pe <dialog> controlează ce acțiuni ale utilizatorului închid fereastra. Fără el, un dialog modal (deschis cu showModal()) se închide cu Escape, iar unul nemodal (deschis cu show()) nu se închide singur.
Valoarea any adaugă închiderea la clic pe fundal, în afara ferestrei (light dismiss), comportament care înainte cerea JavaScript. closerequest permite doar Escape (sau gestul de înapoi pe Android). none lasă închiderea numai în seama codului și a butoanelor tale.
Suportul (octombrie 2026): Chrome 134+ și Firefox 141+; Safari îl are doar în Technology Preview. În Safari atributul este ignorat și dialogul se comportă ca înainte, deci pagina rămâne folosibilă.
Atribute
| Atribut | Descriere |
|---|---|
any |
Se închide la clic în afara dialogului, la Escape și din cod. |
closerequest |
Se închide la Escape (cerere de închidere) și din cod; clicul în afară nu îl închide. Implicit pentru dialogurile modale. |
none |
Se închide doar din cod (close()) sau dintr-un buton din dialog. Implicit pentru dialogurile nemodale. |
Exemple
Exemplul 1: Fereastră cu detalii închisă la clic în afara ei
Combinat cu commandfor, nu ai nevoie de JavaScript.
<button commandfor="detalii" command="show-modal">Vezi detaliile comenzii</button>
<dialog id="detalii" closedby="any">
<h2>Comanda #4512</h2>
<p>Livrare în Iași, 2 produse, total 349 lei.</p>
</dialog>
Ce afișează browserul
Dialogul se închide la clic pe fundalul întunecat, la Escape sau la apelul close().
Exemplul 2: Formular important care nu se închide din greșeală
Cu none, nici Escape, nici clicul în afară nu pierd datele scrise; închiderea se face doar din butoane.
<dialog id="plata" closedby="none">
<form method="dialog">
<label>Nume pe card <input name="nume" autocomplete="cc-name"></label>
<button value="anulare">Anulează</button>
<button value="ok">Plătește 120 lei</button>
</form>
</dialog>
<script>document.getElementById("plata").showModal();</script>
Ce afișează browserul
Dialogul de plată rămâne deschis la Escape și la clic pe fundal; se închide doar cu „Anulează” sau „Plătește 120 lei”.
Greșeli frecvente
- Bazarea doar pe
closedby="any"pentru închidere: în Safari clicul în afară încă nu închide dialogul. Pune mereu și un buton „Închide”. closedby="none"fără niciun buton de închidere: utilizatorul rămâne blocat în fereastră.- Atributul pus pe un
<div>sau pe un popover: există doar pe<dialog>.
Comenzi înrudite
<dialog>: Element nativ pentru ferestre modale, pop-up-uri și alerte, cu fundal întunecat (backdrop) și închidere din tasta Escape.commandfor și command (invoker commands): Atribute pentru butoane care deschid sau închid un dialog sau un popover fără JavaScript și pot trimite comenzi proprii.Atributele popover și popovertarget: Creează un popover nativ, deschis și închis de un buton fără JavaScript, afișat deasupra restului paginii.<form>: Containerul principal pentru colectarea datelor de la utilizator și trimiterea lor către un server.