Premessa
come sappiamo IE non supporta le pseudoclassi :hover e :focus applicate in particolare ai campi del form, aggirare il problema ci sono diverse soluzioni, questa è quella ho fatto io :sexpulp, in particolare non viene aggiunto nessuno stile in linea, e sopratutto penso sia una soluzione davvero molto semplice
lo script è stato provato su IE4 e successivi.
cosa ci serve:
codice CSS su file esterno(consigliato) o interno
codice javascript
codice:
<style type="text/css">
/*codice css di esempio */
.txt{border:1px solid #7B8A94;color:#7B8A94;margin:2px;background-color:#EDEEF0;}
/*queste qui sono le pseudoclassi e fungono con mozilla & Co */
.txt:hover{border:1px solid #FF6600;}
.txt:focus{background-color:#FFFFFF;border:1px solid #FF0000;}
/*queste qui sono invece le classi create per ottenere lo stesso effetto anche con IE(notate il nome della classe)*/
.txtfocus{border:1px solid #FF0000;color:#000000;margin:2px;background-color:#FFFFFF;cursor:text;}
.txthover{border:1px solid #FF6600;color:#000000;margin:2px;background-color:#EDEEF0;}
</style>
<javascript type="text/javascript">
/*script by antos*/
//riconosciamo il browser
var agt=navigator.userAgent.toLowerCase();
var IE = agt.indexOf("msie")!=-1 && agt.indexOf("opera")==-1;
/*
funzione per l'hover
come per le altre funzioni non fa altro che cabiare la classe dell'elemento (X)HTML
*/
function hover(obj){
if(IE){
if (obj.className.indexOf("focus")== -1)
obj.className= obj.className+"hover";
}
}
//funzione per il focus
function selezionato(obj){
if(IE){
obj.className=obj.className.replace("hover","");
obj.className= obj.className+"focus";
}
}
//funzione onmouseout ripristina la classe inziale
function notHover(obj){
if(IE)
obj.className=obj.className.replace("hover","");
}
//funzione onblur ripristina la classe inziale
function notFocus(obj){
if(IE)
obj.className=obj.className.replace("focus","");
}
</script>
...
<input type="text" id="testo" class="txt" onfocus="selezionato(this);" onblur="notFocus(this);" onmouseout="notHover(this);" onmouseover="hover(this);" />
...
come funziona
in tutte le funzoni che vengono richiamate viene passato come paramentro l'oggetto che ha generato l'evento, e da qui ne viene recuperata la classe ed elaborata a seconda dei casi:
1)la funzione hover viene cotrollato l'oggetto ha la classe per il focus (txtfocus) e gli viene assegnata la classe per l'effetto hover (txthover)
2)la funzione focus fa l'inverso della prcedente,viene cotrollato l'oggetto ha la classe per l'hover e gli viene assegnata la classe per l'effetto focus
3)dal nome della classe viene cancellato la stringa "hover" ottendo così la classe di partenza (txt)
4)dal nome della classe viene cancellato la stringa "focus" ottendo così la classe di partenza (txt)
come avrete notato lo script per funzionare correttamente richiede che vengano dati i nomi alle classe seguendo queste "regole"
classe base: nomeclasse
classe per l'hover:nomeclassehover
classe per il focus:nomeclassefocus