Mi piacerebbe avere il browser si comporta come se l'utente avesse premuto il tasto Tab quando loro cliccano su qualcosa. Nel gestore click ho provato i seguenti approcci:Simulazione di una pressione di tasto di tabulazione usando JavaScript
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
e jQuery:
this.input.focus().trigger({ type : 'keypress', which : 9 });
... che ho preso da here.
Il primo approccio sembra essere la soluzione migliore, ma non funziona. Se cambio gli ultimi due parametri su 98, 98, infatti, una "b" viene digitata nella casella di input. Ma 9, 0 e 9, 9 (il primo dei quali ho preso direttamente dal sito web MDC) sia a me dare a questi errori in Firebug sotto FF3:
Permission denied to get property XULElement.popupOpen
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.overrideValue
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to set property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
ho sentito tale (senza una chiara definizione di 'tali') eventi sono 'non attendibili', il che potrebbe spiegare questi errori.
Il secondo approccio causa il valore che ho messo come evento. Che deve essere passato come evento. Che, ma senza alcun effetto (anche se uso 98 anziché 9, non viene digitata "b" nella casella.) Se Provo a impostare event.data nell'oggetto che sto passando, finisce non definito quando l'evento viene attivato. Quello che segue è il codice che sto utilizzando per vedere che:
$('#hi').keypress(function(e) {
console.log(e);
});
Altre idee?
Cosa vuoi invocare? Stai cercando di spostarli al prossimo input? – hunter
Sì. Ma il prossimo "input" non è necessariamente un input o un altro elemento naturalmente cancellato. Né è necessariamente innaturalmente-tabstopped (cioè, $ ("[tabindex]")). Premere fisicamente la linguetta (o shift + tab) fa esattamente quello che voglio ... – Kev
Grazie per questo. Mi interessava solo il primo esempio di codice della tua domanda, il che mi ha davvero aiutato :) –