Form highlighting
Dopo l'autofocus, altro script a mio parere utilissimo è quello dell'highlighting degli input field e delle textarea, ovvero un semplice meccanismo javascript + css che permette di evidenziare il campo della form attualmente in uso. Vi propongo una funzione sviluppata in maniera che sia abbastanza adattabile ai diversi casi.
-
window.onload = function(){
-
/*applico l'highlight a tutti i campi di input*/
-
var inputFields = document.getElementsByTagName("INPUT");
-
for(i=0; i<inputFields.length; i++){
-
var field = inputFields.item(i);
-
if ( field != undefined){
-
if ( field.type=="text" || field.type=="password" ){
-
/*onfocus cambio la classe corrente con quella focus*/
-
field.onfocus = function(){this.className="focus";}
-
/*onblur ripristino la classe di default*/
-
field.onblur = function(){this.className="";}
-
}
-
}
-
}
-
/*stesso vale per le textarea*/
-
var textareas = document.getElementsByTagName("TEXTAREA");
-
for(i=0; i<textareas.length; i++){
-
var textarea = textareas.item(i);
-
textarea.onfocus = function(){this.className="focus";}
-
textarea.onblur = function(){this.className="";}
-
}
-
}
Chiaramento a questo script va assocciato un opportuno foglio di stile con almeno una classe focus.
-
input.focus{
-
border: 1px solid #a00;
-
}
-
textarea.focus{
-
border: 1px solid #a00;
-
}
-
input, textarea{
-
padding: 1px;
-
background-color: #eee;
-
border: 1px solid #999;
-
}
Visto che sostenere l'utilità di questi script può essere discutibile, vi propongo un esempio completo di una tipica form di contatti.
N.B: Questi script non trattano campi del tipo checkbox, ma in quel caso bisognerebbe studiare una soluzione ad hoc che evidenzi l'intera area contente tutti i radio button o checkbox e non il singolo, poichè la check box o i radio button sono uno o più valori per un campo.
Testato su:
Firefox 2.0.0.3 (Linux)
Mozilla 1.7.13 (Linux)
Epiphany 2.16.1 (Linux)
Galeon 2.0.2 (Linux)
IE 6.0 (Linux)

altra domanda/obiezione - non te la prendere, sono polemico di default ;-)
visto che praticamente tutti i browser (escluso ie) supportano la pseudoclasse :focus
non converrebbe per evitare di evitare di far eseguire codice “inutile” controllare se il browser in questione è ie e nel tal caso far partire il js, altrimenti semplicemente mettere nel css (oltre al .focus) anche il :focus??
effettivamente anch’io penso che per i browser più “moderni” si possano usare le pseudoclassi e poi fare un controllo per far partire il js solo in ie6 o < (perchà©, ma potrei sbagliare, penso che ie7 interpreti le pseudoclassi)
secondo questo schemino:
http://tinyurl.com/r9mqs
il :focus non è supportato dall’engine di ie nemmeno nella versione 7…
Secondo il rasoio di Occam ( http://it.wikipedia.org/wiki/Rasoio_di_Occam ) la soluzione piu´semplice e´quella giusta, per IE non vale pero´:P