Come ignorare l'elemento HTML da tabindex?


362

Esiste un modo in HTML per dire al browser di non consentire l'indicizzazione delle schede su elementi particolari?

Sulla mia pagina, però, c'è un baraccone che viene visualizzato con jQuery, quando lo sfogli, ottieni molte pressioni prima che il controllo delle schede si sposta sul successivo link visibile sulla pagina poiché tutte le cose da cui vengono tratteggiate sono nascoste in l'utente visivamente.

Risposte:


592

È possibile utilizzare tabindex="-1".

La specifica HTML5 del W3C supporta tabindexvalori negativi :

Se il valore è un numero intero negativo
L'agente utente deve impostare il flag di focus tabindex dell'elemento, ma non deve consentire all'elemento di essere raggiunto utilizzando la navigazione del focus sequenziale.


Attenzione però che questa è una funzione HTML5 e potrebbe non funzionare con i vecchi browser.
Per essere conforme allo standard HTML 4.01 del W3C (dal 1999) , tabindex dovrebbe essere positivo.


Esempio di utilizzo di seguito in puro HTML.

<input />
<input tabindex="-1" placeholder="NoTabIndex" />
<input />


12
Sembra che Google Chrome non supporti il ​​-1, il che ha senso poiché tecnicamente tabIndex supporta solo 0 -32767 in base al collegamentoW3 . Quindi quando l'ho fatto; Ho usato 500. Hackish; ma ha funzionato.
Flea,

38
@Flea Dalla versione 23, Google Chrome supporta -1 su tabindex. Non sono sicuro di quanto tempo sia successo, forse prima dei 23. Ho provato "-1" in Chrome 23, Firefox 18, IE8, IE9 e Opera 12.11 e ha funzionato su tutta la linea.
jkupczak,

5
Ho modificato la risposta per collegarmi alla specifica HTML5 aggiornata. tabindexora permette di avere valori negativi.
James Donnelly,

1
@JamesDonnelly Grazie per la modifica. Ho aggiunto nuovamente il riferimento alle specifiche HTML4 del W3C per la compatibilità del browser.
Martin Hennings,


121

Non dimenticare che, sebbene tabindexsia tutto minuscolo nelle specifiche e nell'HTML, in Javascript / DOM viene chiamata la proprietà tabIndex.

Non perdere la testa cercando di capire perché la chiamata degli indici di tabulazione modificata a livello di programmazione element.tabindex = -1non funziona. Usa element.tabIndex = -1.


34
Sembra che dovrebbe essere un commento, non una risposta.
DrCord,

47
Eh, mi ha fatto piacere leggerlo, e probabilmente mi sarei perso se fosse stato sepolto come commento.
MalcolmOcean

10

Se questi sono elementi naturalmente nell'ordine di tabulazione come pulsanti e ancore, rimuoverli dall'ordine di tabulazione con tabindex = -1 è una specie di odore di accessibilità. Se stanno fornendo funzionalità duplicate rimuoverli dall'ordine di tabulazione è ok, e considera l'aggiunta di aria-hidden = true a questi elementi, quindi le tecnologie assistive li ignoreranno.


8

Se stai lavorando in un browser che non supporta tabindex="-1", potresti essere in grado di cavartela semplicemente dando alle cose che devono essere saltate un indice di tabulazione davvero alto . Ad esempio, tabindex="500"fondamentalmente sposta l'ordine di tabulazione dell'oggetto alla fine della pagina.

L'ho fatto per un lungo modulo di inserimento dati con un pulsante lanciato al centro. Non è un pulsante che le persone fanno clic molto spesso, quindi non volevo che si accedessero accidentalmente ad esso e premessero Invio. disablednon funzionerebbe perché è un pulsante.


5

Un hack come "tabIndex = -1" non funziona per me con Chrome v53.

Questo è ciò che funziona per Chrome e la maggior parte dei browser:

function removeTabIndex(element) {
    element.removeAttribute('tabindex');
}
<input tabIndex="1" />
<input tabIndex="2" id="notabindex" />
<input tabIndex="3" />
<button tabIndex="4" onclick="removeTabIndex(document.getElementById('notabindex'))">Remove tabindex</button>


Questo non assegnerà semplicemente un indice di tabulazione predefinito all'elemento anziché disabilitare il tabbing?
Lawyerson,

@Lawyerson no, in realtà disabilita la tabulazione come si spiega da sé 'removeAttribute'. l'hai provato ma con risultati diversi?
Val

2
L'ho provato senza alcun effetto. I browser per impostazione predefinita ti consentono di scorrere gli input nell'ordine in cui appaiono sulla pagina anche se su di essi non è impostato alcun tabindex, quindi per me ha senso solo che la semplice rimozione dell'attributo non disabiliti completamente la tabulazione. Inoltre, l'input che voglio usare questo non ha alcun attributo "tabindex" per cominciare.
Lawyerson,

Eseguendo lo snippet posso scorrere nella notabindexcasella come se fosse stato tabIndex=5dopo aver premuto il pulsante. Non è un problema di sindaco ma non lo rende ancora del tutto "non tabulabile".
Mikael Dúi Bolinder,

Probabilmente non funziona perché stai usando una custodia per cammelli. Dovrebbe essere tutto minuscolotabindex
dman

3

Il modo per farlo è aggiungendo tabindex="-1". Aggiungendo questo a un elemento specifico, diventa irraggiungibile dalla navigazione da tastiera. C'è un ottimo articolo qui che ti aiuterà a capire ulteriormente il tabindex .


2

Basta aggiungere l'attributo disabledall'elemento (o usare jQuery per farlo per te). Disabilitato impedisce l'ingresso o la messa a fuoco dell'ingresso.


Quale versione di Chrome?
Yaakov Ainspan,

Chrome 49.0.2623.75 (64 bit).
Felix Eve,

La mia versione è 51.0.2704.103. Dai un'occhiata a questo violino . Potresti avere il codice sbagliato, non lo sai mai.
Yaakov Ainspan,

@AtulChaudhary, come non funziona? Puoi ancora focalizzarlo?
Yaakov Ainspan,

una volta che i campi sono disabilitati rimangono disabilitati ed è un problema in IOS9 ma sembra funzionare in IOS10
Atul Chaudhary
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.