L'obiettivo finale: pagine carine per utenti di mouse, pagine accessibili per gli utenti di tastiera. L'effetto che voglio è quello di fare clic su un'ancora per non produrre alcun contorno durante e non lasciare nessun contorno dopo. Inoltre, voglio che i tasti della tastiera tocchino la messa a fuoco e quindi circondino gli oggetti con un contorno. Il seguente codice funziona in FF (e presumo gli altri browser moderni, ma dovrò testarli domani in ufficio), ma non IE6-8. Il problema sta nel fatto che onMouseDown non sembra offuscare come previsto:Come rimuovere lo stato attivo sumousedown in IE?
var links = document.getElementsByTagName('a');
for (var i=0; i < links.length; i++) {
links[i].onmousedown = function() {
this.blur();
return false;
}
links[i].onclick = function() {
this.blur();
}
}
Un compromesso sarebbe se qualcuno ha una soluzione in grado di gestire il caso in IE, dove l'utente posiziona il mouse verso il basso, posiziona il mouse all'esterno ancorare, poi rialzare e non lasciare alcun contorno dietro sarebbe un passo nella giusta direzione. Grazie.
EDIT: venerdì 5 marzo 2010 Le mie più profonde scuse per aver impiegato così tanto tempo per tornare a questo, ma avevo bisogno di una soluzione che funzionasse nel maggior numero di browser possibile. Bene, non è necessario alcun timeout solo per alcuni schemi, classi e gestione dei focus. La seguente soluzione funziona con IE6 +, FF2 +, Safari 3+ e Chrome. Non ho provato in Opera, ma mi piacerebbe se qualcuno potesse confermare/negare che funzioni. Quello che segue è più codice suedo che puro js. Lascio come esercizio per il lettore a implementare nel vostro quadro preferito:
var anchorEventIsMouse = true;
$('a').mousedown(function() {
anchorEventIsMouse = true;
this.hideFocus = true; /* IE6-7 */
this.style.outlineStyle = 'none'; /* FF2+, IE8 */
this.addClass('NoOutline'); /* see click func */
this.setFocus(); /* Safari 3+ */
});
$('a').keydown(function() {
anchorEventIsMouse = false;
});
$('a').blur(function() {
this.style.outlineStyle = '';
this.hideFocus = false;
this.removeClass('NoOutline');
});
$('a').click(function(e) {
/* Adding class NoOutline means we only allow keyboard
* clicks (enter/space) when there is an outline
*/
if (!anchorEventIsMouse && this.hasClass('NoOutline')) {
e.stopEventPropagation();
}
});
Non ho mai visto "mouse" usato come un verbo prima ... :) – Guffa
+1 per mousing. –
IE8 È un browser moderno, lo sai. –