Perché la tabulazione su una griglia DojoX genera JavaScript & # 8220; Impossibile spostare lo stato attivo per controllare & # 8221; errore?
-
11-07-2019 - |
Domanda
problema
Ho un numero di componenti Dojo su una pagina. Quando l'utente tenta di passare da un componente simile a un input a un componente simile a una griglia, ottengo JavaScript "Impossibile spostare lo stato attivo per controllare" errore. La base utenti utilizza IE6.
Soluzione
Il primo elemento nel layout Griglia DojoX non può essere nascosto. Se è nascosto, ottieni un JavaScript " Impossibile spostare lo stato attivo per controllare " errore. Per risolvere questo problema, ho aggiunto una riga # che viene visualizzata. Vedi sotto.
var gridLayout = [ new dojox.grid.cells.RowIndex({ name: "row #", width: 2, styles: "text-align: right;" }), { field: "ele_id", name: "Element ID", styles: "text-align:right;", width:5, hidden:"true" }, { field: "ele_nm", name: "Element Name", styles: "text-align:left;", width:8 } ];
Soluzione 10
Soluzione
Il primo elemento nel layout Griglia DojoX non può essere nascosto. Se è nascosto, ottieni un JavaScript " Impossibile spostare lo stato attivo per controllare " errore. Per risolvere questo problema, ho aggiunto una riga # che viene visualizzata. Vedi sotto.
var gridLayout = [ new dojox.grid.cells.RowIndex({ name: "row #", width: 2, styles: "text-align: right;" }), { field: "ele_id", name: "Element ID", styles: "text-align:right;", width:5, hidden:"true" }, { field: "ele_nm", name: "Element Name", styles: "text-align:left;", width:8 } ];
Altri suggerimenti
La prevenzione della tabulazione può interrompere gli utenti ipovedenti che navigano nel tuo sito utilizzando uno screen reader.
Se l'input Y non accetta l'input dell'utente, non trasformarlo in un campo di input!
Se lo stai usando solo per la visualizzazione del valore, utilizza invece un < span >
o < div >
invece.
Personalmente ritengo che questo tipo di comportamento sia un po 'fastidioso. Perché proibisci all'utente di concentrarsi su quel campo?
Una soluzione migliore sarebbe quella di nascondere / disabilitare il campo fino a quando non è pronto per l'inserimento dei dati al suo interno. Dovresti anche avere del testo per spiegare perché il campo è disabilitato.
Modifica: il messaggio di errore che hai pubblicato ha alcuni risultati su google, ma sembra che potrebbe esserci un numero qualsiasi di problemi, questo suoni di http://www.francoisfaubert.com/2008/03/06/cant-move-focus-to-control/ come potrebbe essere una possibilità. Controlla il tuo HTML per vedere se ci sono altri controlli con lo stesso ID sulla pagina.
È possibile impostare Input-Z come controllo disabilitato. Quindi, quando l'utente accede a Input-Y e lo riempie, cambia Input-Z in abilitato. Come puoi farlo:
<input id="Input-x" type="text" />
<input id="Input-y" type="text" onChange="document.getElementById('Input_Z').removeAttribute('disabled');" />
<input id="Input-z" type="text" disabled />
Devi gestire l'evento keydown e ascoltare il carattere 9 (che è il carattere di tabulazione). Per invalidare l'evento devi semplicemente restituire false quando l'utente preme il carattere 9.
handleKeyDown (e)
{
var keynum;
var keychar;
var numcheck;
if (window.event) // IE
{
keynum = e.keyCode;
}
altrimenti if (e.which) // Netscape / Firefox / Opera
{
keynum = e.which;
}
return keynum! = 9;
``
}
Dopo che i tuoi commenti hanno chiarito il problema, capisco che hai bisogno che l'utente non possa focalizzare un elemento con il tasto tab. Prova ad aggiungere all'elemento:
tabindex = " -1 "
per esempio:
<div id="mygrid" tabindex="-1"> <!-- Some stuff here --> </div>
Ulteriori informazioni sui tabindex negativi: introduzione a wai- Aria
Modifica: Ulteriori informazioni su ARIA: http://www.w3.org/WAI/intro/aria
Riguardo al messaggio di errore: da Il serbatoio del falso :
" è probabile che tu abbia ID in conflitto nel tuo documento. Inoltre, ricorda IE 7 e le versioni precedenti sono le sole a pensare che un attributo name debba essere trattato come un ID. & Quot;
Quindi, in primo luogo, si tratta di un bug specifico di IE. In secondo luogo, vai a cambiare i tuoi ID. Sembra essere qualcosa che ha afflitto prima alcuni software HP basati su HTML e apparso quando gli utenti hanno eseguito l'aggiornamento da IE6 a IE7.
Per quanto riguarda la domanda sulla disabilitazione del focus, basta nascondere gli input indesiderati con type = hidden nel tag e cesseranno di essere un problema. Non scherzare mai con il tabbing delle persone: è l'unica cosa che è migliorata con HTML su app di Windows.
Morale del racconto:
- Fallo correttamente
- Microsoft è una schifezza sul Web
- Non scherzare con il comportamento della GUI standard
<input name="z" onfocus="this.blur()"/>
Assegna all'elemento componente un attributo tabindex con il valore -1