torna alle lezioni

Modal form

importanza: 5

Create una funzione showPrompt(html, callback) che mostra un form con un messaggio html, un campo di input ed i pulsanti OK/CANCEL.

  • Un utente dovrebbe digitare qualcosa nel campo di testo e premere Enter o il pulsante OK, quindi verrà chiamata callback(value) con il valore che è stato inserito.
  • Altrimenti, se l’utente preme Esc oppure CANCEL, viene chiamata callback(null).

In entrambi i casi, questo termina l’elaborazione dell’input e rimuove il form.

Requisiti:

  • Il form dovrebbe essere al centro della finestra.
  • Il form è modal. In altre parole, non possono esserci interazioni con il resto della pagina fino a quando non viene chiusa.
  • Quando viene mostrato il form, il focus dovrebbe essere dentro il campo <input> per l’utente.
  • I tasti Tab/Shift+Tab dovrebbe cambiare il focus tra i campi del form, e non permettergli di lasciarlo per altri elementi della pagina.

Un esempio di come dovrebbe funzionare:

showPrompt("Enter something<br>...smart :)", function(value) {
  alert(value);
});

Una demo nell’iframe:

P.S.: Il sorgente del documento ha HTML e CSS per il form, con posizionamento fixed, ma sta a te renderla modale.

Apri una sandbox per l'esercizio.

Una finestra modale può essere implementata usando un <div id="cover-div"> semitrasparente che copre l’intera finestra, in questa maniera:

#cover-div {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 9000;
  width: 100%;
  height: 100%;
  background-color: gray;
  opacity: 0.3;
}

Dato che il <div> copre ogni cosa, sarà questo elemento a catturare tutti i click, e non la pagina sottostante.

Inoltre può essere prevenuto lo scrolling della pagina impostando body.style.overflowY='hidden'.

Il form non dovrebbe essere dentro il <div>, ma subito dopo nel codice della pagina (quindi starà anche sopra), perché non vogliamo che sia soggetto alla trasparenza dovuta ad opacity.

Apri la soluzione in una sandbox.