Ich möchte, dass der Browser so verhält, als hätte der Benutzer die Tabulatortaste gedrückt, wenn er auf etwas klickt. Im Click-Handler habe ich folgende Ansätze versucht:Tabulatortaste mit JavaScript simulieren
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
Und jQuery:
this.input.focus().trigger({ type : 'keypress', which : 9 });
..., die ich von here nahm.
Der erste Ansatz scheint die beste Wette zu sein, funktioniert aber nicht ganz. Wenn ich die letzten beiden Parameter auf 98, 98 ändere, wird tatsächlich ein 'b' in das Eingabefeld eingegeben. Aber 9, 0 und 9, 9 (von denen das erstere nahm ich direkt von der MDC-Website), die beide geben mir diese Fehler in Firebug unter 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);
Ich habe so gehört (ohne klare Definition des Begriffs "solche" Ereignisse sind "nicht vertrauenswürdig", was diese Fehler erklären könnte. Der zweite Ansatz verursacht jeden Wert, den ich als event.which setze, was als event.which übergeben wird, aber ohne Wirkung (auch wenn ich 98 anstelle von 9 verwende, wird in der Box kein 'b' eingegeben). If Ich versuche, event.data in dem Objekt, das ich überlasse, zu setzen, es endet undefiniert, wenn das Ereignis ausgelöst wird. Was folgt ist der Code, den ich verwende, um das anzuzeigen:
$('#hi').keypress(function(e) {
console.log(e);
});
Irgendwelche anderen Ideen?
Was möchten Sie aufrufen? Versuchen Sie, sie zur nächsten Eingabe zu bewegen? – hunter
Ja. Aber die nächste "Eingabe" ist nicht notwendigerweise eine Eingabe oder ein anderes natürlich tabstopped Element. Es ist auch nicht notwendigerweise unnatürlich-tabstopped (d. H. $ ("[Tabindex]")). Drücken Sie die Tabulatortaste (oder Shift + Tab) genau das, was ich will ... – Kev
Danke dafür. Ich war nur am ersten Codebeispiel Ihrer Frage interessiert, das wirklich geholfen hat :) –