2 Stimmen

Wie kann man unbehandelte Tastendrücke an ein bestimmtes Eingabefeld senden?

Ich versuche, die folgende, scheinbar einfache Sache zu tun.

Wenn eine Taste gedrückt wird, mit der ein Zeichen in ein Texteingabefeld eingegeben worden wäre, und dieser Tastendruck nicht bereits anderweitig verarbeitet wird (z. B. weil kein Eingabefeld den Fokus hatte), dann ein bestimmtes Eingabefeld fokussieren und das Zeichen dort eingeben .

Dies dient dazu, den Nutzern einen Mausklick in einem Browserspiel zu ersparen, das schnelle Antworten erfordert, könnte aber ebenso gut z. B. in einer Chat-Anwendung verwendet werden. Wenn der Benutzer versehentlich vergisst, dieses (große und offensichtliche) Eingabefeld zu fokussieren, dann möchte ich dies elegant behandeln und ihn nicht bestrafen.

Vorbehalte:

  • Wenn ein Eingabefeld den Fokus hat, sollte das Ereignis dorthin gehen und nirgendwo anders.
  • Tasten, die keine Zeichen eingeben (Enter, Pfeiltasten, PgUp, PgDn, ...), sollten ihr Standardverhalten beibehalten.

Mit jQuery, kam ich mit etwas wie dieses:

$(document).keypress(function(e) {
  var input = $("#my-input-field");
  if (e.which >= ' ' && !input.is(":focus")) {
    input.focus();
    input.trigger(e);
    e.preventDefault();
  }
});

Dies funktioniert jedoch nicht, und zwar aus zwei Gründen:

  1. Die Ereignisse sprudeln immer noch zu document auch wenn ein bestimmtes Eingabefeld sie verarbeitet. Mögliche Lösungen:
    • Einhaken keypress Ereignisbehandler für alle Eingabefelder und rufen stopPropagation aber das klingt nach einem furchtbaren Hack, der nur darauf wartet, schief zu gehen.
    • Überprüfen Sie in der oben genannten Handler, ob ein Eingabefeld derzeit den Fokus hat, und ignorieren Sie es, wenn ja, aber das klingt wie ich würde einige Eckfälle, wo etwas anderes ist mit den Tastendrucken zu verpassen.
  2. Aufruf von .trigger(e) funktioniert nicht. Es ruft meine benutzerdefinierte Event-Handler, aber nicht auslösen die defaut keypress Verhalten des tatsächlichen Einfügens des Zeichens.

Was ist der sauberste Ausweg?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X