Perché la tabulazione su una griglia DojoX genera JavaScript & # 8220; Impossibile spostare lo stato attivo per controllare & # 8221; errore?

StackOverflow https://stackoverflow.com/questions/321193

  •  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          
    }
  ];
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top