Come faccio a mostrare il contenuto quando Javascript non è disponibile, nasconderlo quando javascript è disponibile e non sfarfallio in entrambi i casi?
-
06-07-2019 - |
Domanda
Ho un modulo semplice per le opzioni di spedizione e sto usando javascript per inviare automaticamente il modulo quando qualcuno seleziona una nuova opzione dall'elenco a discesa.
Per supportare i browser senza javascript c'è anche un pulsante per inviare il modulo. Questo pulsante è nascosto tramite JavaScript.
Tuttavia, ciò significa che il mio pulsante è visibile per un breve periodo di tempo e può causare uno sfarfallio poiché il resto del contenuto viene riformattato.
Qualcuno può suggerire un modo per creare il pulsante in modo che inizi nascosto, ma è reso visibile solo se javascript non è disponibile? ad es. iniziare con display: none; e cambia magicamente per visualizzare: blocco; se e solo se non esiste javascript.
Soluzione
Basta inserire qualsiasi cosa all'interno dei tag <noscript> ... </noscript>
e apparirà solo se JavaScript non è abilitato / disponibile.
Altri suggerimenti
Dipende da come lo stai nascondendo, stai usando un DOM pronto o una finestra pronta? Window ready attende il download di tutte le immagini, che in genere è troppo lungo.
Per accessibilità, ragioni, lo nasconderei su DOM caricato. Ma per assicurarti che non venga visualizzato, puoi inserirlo in un elemento noscript
<noscript>
<input type="submit" />
</noscript>
Per quanto riguarda il tuo ultimo paragrafo, nulla di simile può accadere in assenza di JavaScript.
Basta scrivere javascript discreto: http://icant.co .uk / articoli / sette-rules-of-discreto-javascript / .
Quello che fai è scrivere la tua pagina come una pagina normale, ma, quindi, utilizzare il codice in basso per avviare il javascript e iniziare a modificare la pagina per renderla più interattiva. Il bello di questo è che se hanno JavaScript disattivato la pagina è normale, ma, se ce l'hanno, puoi aggiungere con garbo più funzionalità.
Non sono un grande fan dell'opzione in quanto ciò potrebbe significare un sacco di codice aggiuntivo da scaricare che non è necessario.
In questa pagina guarda il commento 5 per una buona soluzione per poter apportare modifiche prima che qualsiasi cosa venga effettivamente visualizzata: http://dean.edwards.name/weblog/2006/06/again/
È possibile utilizzare lo script prima e dopo il pulsante di invio per scrivere tag di inizio e fine dell'elemento div nascosto.
Un'opzione sarebbe quella di iniziare con il pulsante mostrato, quindi modificare il suo CSS da JavaScript:
<head>
...
<link rel="stylesheet" href="style.css" type="text/css" charset="utf-8">
<script>
document.styleSheets[0].addRule(".hideMe", "display:none");
</script>
...
</head>
La modifica del foglio di stile invece del pulsante (e mettendo questo codice esterno di un onload) assicura che sarà nascosto prima che il pulsante venga disegnato.