2012-06-28 18 views
8

Sembra esserci un problema quando si imposta lo stato attivo su un elemento usando jquery. Apparentemente non attiva la proprietà: focus css impostata su un elemento.jquery focus non attiva il fuoco css

Per esempio nel mio css ho:

div.item1:focus { border:2px solid red; } 

nel mio jQuery ho: è impostato

$("div.item1").focus(); 

La messa a fuoco, ma non v'è alcun bordo rosso applicato all'elemento.

risposta

8

div elementi non usa il selettore :focus .. vedi the CSS2 spec

L': focus pseudo-classe applica mentre un elemento ha il focus (accetta eventi di tastiera o altre forme di immissione di testo).

Si potrebbe fare questo:

.hoverclass { border:2px solid red; } 

$("div.item").hover(function() { 
    $(this).addClass('hoverclass') 
},function() { 
    $(this).removeClass('hoverclass') 
}); 

Questo utilizza .hover(), .addClass() e .removeClass()

3

focus() è utilizzabile solo con elementi del modulo e link, e non funzionerà se si tenta di utilizzarlo su altri tipi di elementi.

Vedere la jQuery doc for focus() per ulteriori informazioni,

+2

Nelle versioni più recenti del browser, l'evento può essere esteso a tutti i tipi di elementi impostando in modo esplicito proprietà tabIndex dell'elemento. - dal link jQuery docs sopra – sabithpocker

+0

Sembra abbozzato da usare in quanto non esiste una definizione di cosa sia un "browser recente", ma ovviamente lo si può fare anche in questo modo. Probabilmente sono preferibili altri soluzioni alternative. –

+0

Ho appena trovato il lavoro di ppk su questo, ha incluso 'elementi con tabindex' per la sua ricerca sembra – sabithpocker

2

Da the manual:

L'evento di messa a fuoco viene inviato ad un elemento quando si guadagna messa a fuoco. Questo evento è implicitamente applicabile a un insieme limitato di elementi, come il modulo elementi (<input>, <select>, ecc.) E i collegamenti (<a href>). Nelle recenti versioni del browser , l'evento può essere esteso per includere tutti i tipi di elemento impostando esplicitamente la proprietà tabindex dell'elemento. Un elemento può ottenere lo stato attivo tramite i comandi da tastiera, come il tasto Tab, oppure facendo clic con il mouse sull'elemento.

Vedere questa risposta per un esempio: https://stackoverflow.com/a/5966034/1013082

0

Hai bisogno di fare questo:

$("div.item1").focus(function(){ 
     $("div.item1").css("border","2px solid red"); 
     }); 
+1

che dire di contorno invece di confine? – sabithpocker

0

Vai alla pagina jQuery messa a fuoco() per vedere:

L'evento di messa a fuoco viene inviato a un elemento quando diventa attivo. Questo evento è implicitamente applicabile a un insieme limitato di elementi, come il modulo elementi (<input>, <select>, ecc.) E i collegamenti (<a href>). Nelle recenti versioni del browser , l'evento può essere esteso per includere tutti i tipi di elemento impostando esplicitamente la proprietà tabindex dell'elemento. Un elemento può ottenere lo stato attivo tramite i comandi da tastiera, come il tasto Tab, oppure facendo clic con il mouse sull'elemento.

andare a studiare di PPK di attenzione per i browser qui

PPK focus Event Browser compatibility

Sembra che tutti i browser superano il test tabindex.