Non ho trovato alcuna soluzione o soluzione integrata per la chiusura dell'elemento html5 facendo clic sul suo sfondo (:: sfondo), sebbene sia chiaramente una base funzionalità.Come chiudere il nuovo tag html <dialog> facendo clic sul suo :: fondale
12
A
risposta
14
I clic sullo sfondo possono essere rilevati utilizzando il rettangolo di selezione della finestra di dialogo.
var dialog = document.getElementByTagName('dialog');
dialog.showModal();
dialog.addEventListener('click', function (event) {
var rect = dialog.getBoundingClientRect();
var isInDialog=(rect.top <= event.clientY && event.clientY <= rect.top + rect.height
&& rect.left <= event.clientX && event.clientX <= rect.left + rect.width);
if (!isInDialog) {
dialog.close();
}
});
4
Un'altra soluzione più efficiente è quello di avvolgere il dialog
-CONTENUTO in un div
con padding: 0
. In questo modo è possibile verificare event.target
dell'evento clic, che fa riferimento alla finestra di dialogo in caso di sfondo e qualsiasi altro elemento all'interno di div
in caso di modale reale.
Non controllando le dimensioni effettive, è possibile impedire i cicli di layout.
0
Per chiunque inciampo su questa domanda e vuole seguire la soluzione consigliata dal @meaku, ecco come ho risolto utilizzare un per incapsulare l'elemento e non lavorare con getBoundingClientRect() Calcolo:
const popup = document.getElementById('popup');
const popupDialog = document.getElementById('popup-dialog');
popup.addEventListener('click', function(e){
console.info(e.target.tagName);
if (e.target.tagName === 'DIALOG') popupDialog.close()
});
<div id="popup" style="padding: 0">
<dialog id="popup-dialog" style="display:none;">
<h4>Dialog Title</h4>
<footer class="modal-footer">
<button id="popup-close" type="button">close</button>
<button id="popup-ok" type="button">ok</button>
</footer>
</dialog>
</div>
Problemi correlati
- 1. Come chiudere una modal facendo clic all'esterno della finestra modale?
- 2. Come chiudere correttamente il tag <img>?
- 3. TimePickerDialog: Facendo clic sul pulsante "Annulla" chiama il metodoTimeSet()
- 4. Come ottenere xpath facendo clic su un elemento html
- 5. Oracle SQL Developer, come aprire tabella/vista facendo clic/doppio clic sul suo nome nel foglio di lavoro?
- 6. Javascript - come chiudere la scheda del browser corrente facendo clic su un pulsante?
- 7. Recupero poligono TOPOJSON rimosso facendo clic su uno nuovo
- 8. Come chiudere la finestra Html quando si fa clic sul pulsante asp.net?
- 9. Chiude automaticamente il tag XML/HTML corretto alla digitazione</
- 10. Come applicare il passaggio del mouse sul tag dell'area html?
- 11. Facendo clic sul mouse per trascinare gli oggetti su Mac
- 12. Passare i parametri all'applicazione JavaFx facendo doppio clic sul file
- 13. facendo clic sul frammento richiama l'attività dietro di esso
- 14. jointjs: impedire l'aggiunta di vertici facendo clic sul collegamento
- 15. facendo clic sul pulsante una sola volta (js)
- 16. Angular Bootstrap Modal lascia il fondale aperto
- 17. Come aprire una nuova finestra popup facendo clic su un link di azione html in MVC?
- 18. Come posso chiudere/chiudere Bootstrap Popover quando si fa clic sull'elemento di innesco popover?
- 19. Javascript: facendo clic automaticamente su un pulsante?
- 20. Come chiudere una finestra di dialogo in Android facendo clic all'interno?
- 21. Come aggiungere JPanel facendo clic su JButton?
- 22. jQuery. Ottieni il valore del campo di immissione del testo sul pulsante facendo clic sull'evento?
- 23. come chiamare particolari utenti json facendo clic sul pulsante nella directory personalizzata in angular.js
- 24. Polimero 1.x: la finestra di dialogo della carta modale appare dietro il suo fondale
- 25. ui.bootstrap deforma il tag HTML <progress>
- 26. Come chiudere la finestra con il suo nome?
- 27. perché usiamo <html> tag, anche se il mio sito web viene eseguito perfetto senza <html> tag
- 28. Come impedire l'evento di clic genitore quando l'utente fa clic sul suo elemento figlio? AngularJS
- 29. Come disabilitare facendo clic all'interno di div
- 30. Il parser HTML convalida i tag
Ottima idea! Funziona bene, grazie! – mantramantramantra
Ho dovuto anche controllare che 'event.target' fosse il' dialog'. EG 'if (! IsInDialog && event.target.tagName === 'DIALOG')'. Se un modulo viene inviato all'interno della finestra di dialogo premendo 'invio', quindi un evento evento click scatterà dal pulsante di invio, e per qualche motivo il suo clientX e clientY sono 0. – kmurph79