JQUERY KeyCode
mixmastertobsi
- javascript
Hallo,
ich suche eine Möglichkeit, jede Tastatureingabe abzufangen, egal ober ein input-field ausgewählt ist, oder eben nicht.
KeyCode ist zwar eine Möglichkeit, allerdings bekomme ich dort ja keinen "Buchstaben" angezeigt. Gibt es hier ggf. etwas von JQUERY, das den KeyCOde gleich übersetzt, oder gibt es eine andere Möglichkeit?
$( document ).on( "keydown", function( event ) {
Lieber mixmastertobsi,
ich verstehe nicht, inwiefern Deine Anforderung
jede Tastatureingabe abzufangen,
und
[mit KeyCode] keinen "Buchstaben" angezeigt.
ein Problem sein soll. Willst Du nun "jede Tastatureingabe", oder "jedes eingegebene Zeichen" haben?
$( document ).on( "keydown", function( event ) {
Ja, die Variable "event" hat die Eigenschaft KeyCode, in der ein Wert steht, der die Tastenkombi repräsentiert. Was das zugehörige Zeichen angeht, so solltest Du mit den UTF-8-Werten für darstellbare Zeichen ganz schnell zurecht kommen. Alles unter dezimal 32 ist nicht darstellbar. Und wenn es um Akzente geht, die erst in Kombination mit dem folgenden Zeichen einen Buchstaben ergeben... na, dann viel Spaß! Wie genau benötigst Du denn Deinen Keylogger (denn das willst Du gerade bauen!) hinsichtlich der eingegebenen Zeichen?
Liebe Grüße,
Felix Riesterer.
Hallo und Danke!
Ich kann ja mal erzählen, was ich vorhabe.
Ich habe ein Scan-Gerät mit Android Betriebssystem. Über die Web-App soll ich manuell Daten eingeben können, aber auch eben Scannen. Nun könnte ich ein Input-Feld nehmen, allerdings habe ich hier das Problem, dass die Touchtastatur angezeigt wird, sobald das Input fokusiert wurde.
Nun habe ich folgendes Probiert - sobald das keydown event ausgelöst wird, soll das Input-Feld fokusiert werden. Das Problem dabei ist, dass in dem Fall zwar das Feld fokusiert wird, allerdings nichts "reingeschrieben" wird.
Eventuell wird noch ein anderes Event vor keydown ausgelöst, aber welches. Wie könnte ich mir denn alle Events anzeigen lassen, die ausgelöst werden?!?
Lieber mixmastertobsi,
Ich kann ja mal erzählen, was ich vorhabe.
das wurde auch höchste Zeit, sowas sollte bereits im Ausgangsposting stehen!
Nun könnte ich ein Input-Feld nehmen, allerdings habe ich hier das Problem, dass die Touchtastatur angezeigt wird, sobald das Input fokusiert wurde.
Und was hindert Dich daran, eines zu simulieren? Das KeyDown- und das KeyUp-Event sollte völlig genügen, um eingegebene Zeichen in ein Element Deiner Wahl zu schreiben, bzw. von dort wieder zu löschen. In meinem Quiz-Script hatte ich beim Kreuzworträtsel eine ähnliche Vorgehensweise - nur dass ich da ein "verstecktes" <input type="text">
verwendet habe, bei dem ich das Change-Event zum Ermitteln der aktuellen Eingabe verwendet habe. Kannst es Dir ja einmal anschauen (ist schon sehr in die Jahre gekommen).
Nun habe ich folgendes Probiert - sobald das keydown event ausgelöst wird, soll das Input-Feld fokusiert werden. Das Problem dabei ist, dass in dem Fall zwar das Feld fokusiert wird, allerdings nichts "reingeschrieben" wird.
Du kannst den Wert der value-Eigenschaft verändern...
Eventuell wird noch ein anderes Event vor keydown ausgelöst, aber welches.
Wenn das Feld nicht fokussiert ist, dann ändert es seinen Inhalt nicht - sonst würdest Du ja immer in alle Felder auf einmal schreiben, wenn ein Formular mehrere hat.
Wie könnte ich mir denn alle Events anzeigen lassen, die ausgelöst werden?!?
Keine Ahnung, da Du ja auch eigene Events definieren und auslösen kannst. Diese Frage führt Dich nicht zu der von Dir gewünschten Lösung.
Liebe Grüße,
Felix Riesterer.
Hallo und Danke!
Und was sollte ich da simulieren? Problem ist, dass ja ein Input-Feld fokusiert werden muss, damit der Inhalt geschrieben wird. In dem Fall erscheint dann aber auch die virtuelle Tastatur von diesem Android-Gerät. Ich gebe mit dem Script ein Input-Feld vor, in welches geschrieben werden muss. Ich brauche also nur den Buchstaben, welcher geschrieben wurde.
Sorry - leider ist es etwas schwer zu erklären, wenn man nicht selbst so ein Gerät hat und testen kann.
Lieber mixmastertobsi,
Ich gebe mit dem Script ein Input-Feld vor, in welches geschrieben werden muss. Ich brauche also nur den Buchstaben, welcher geschrieben wurde.
willst Du nun, dass das Feld sichtbar ist, oder nicht? Willst Du, dass die Tastatur erscheint, oder nicht? Was willst Du genau?
Liebe Grüße,
Felix Riesterer.
Das Feld muss nicht sichtbar sein und die Tastatur soll nicht erscheinen.
Hallo
Das Feld muss nicht sichtbar sein und die Tastatur soll nicht erscheinen.
Ich klinke mich mal hier ein, um erst einmal klar zu kriegen, worum es geht.
Ich vermute mal in's Blaue, dass das Scannen hier keine Rolle spielt. Es geht um die manuelle Eingabe, oder?
Ok, es soll (manuell) etwas geschrieben werden, aber nicht mit der virtuellen Tastatur des OS?
Jetzt nochmal in's Blaue: Hat der Scanner etwa eine Hardwaretastatur? Sollen deren Eingaben abgefangen und in das Eingabefeld geschrieben werden?
Tschö, Auge
Also das Gerät ist von Cipherlab Modell RS30
An der Seite hat das Gerät einen Knopf, mit welchem man einen Barcode scannen kann. Wurde der Code erfolgreich gescannt, schreibt er diesen in ein Input-Feld. Nun eben das Problem - wenn das Input-Feld ausgewählt wurde, erscheint die virtuelle Tastatur - und diese finde ich eben unschön.
Hallo
Also das Gerät ist von Cipherlab Modell RS30
Handelt es sich um jenes Gerät, das offensichtlich nicht allein ein Barcodescanner ist? Ich hatte mir nach deinen Beschreibungen eher sowas oder sowas (aber mit Tastatur und Display) vorgestellt.
An der Seite hat das Gerät einen Knopf, mit welchem man einen Barcode scannen kann. Wurde der Code erfolgreich gescannt, schreibt er diesen in ein Input-Feld. Nun eben das Problem - wenn das Input-Feld ausgewählt wurde, erscheint die virtuelle Tastatur - und diese finde ich eben unschön.
Verständlich. Zur Lösung kann ich leider nichts weiter beitragen, als die gestellten Verständnisfragen.
Tschö, Auge
Hallo,
ja, es ist der erste Link, den Du mir zugesandt hattest.
@@mixmastertobsi
An der Seite hat das Gerät einen Knopf, mit welchem man einen Barcode scannen kann. Wurde der Code erfolgreich gescannt, schreibt er diesen in ein Input-Feld.
Dann ist ja alles gut.
Nun eben das Problem - wenn das Input-Feld ausgewählt wurde, erscheint die virtuelle Tastatur - und diese finde ich eben unschön.
Ich finde es bemerkenswert (lies: erschreckend), wie oft „finde ich eben unschön“ als Begründung herhalten muss, bestehende Funktionalität nachzubauen und dabei oft kaputtzumachen.
Für eine Texteingabe ist ein Texteingabefeld (input
) genau das richtige. Das funktioniert von Haus aus. Texteingabe nicht nur per Tastatur, sondern auch per Barcode-Scanner, QR-Scanner etc. zu ermöglichen, ist ein typischer Fall für progressive enhancement: Die vorhandene Eingabemöglichkeit wird erweitert. Nicht ersetzt. Die Eingabe per Tastatur sollte nach wie vor funktionieren.
Jetzt könnte jemand anbringen, dass diese Anwendung nur für Barcode-Scanner gedacht ist und nur mit diesem funktionieren muss. Ach ja? Und wenn der mal einen Code nicht lesen kann? Was tun Kassierer in der Kaufhalle[1] in diesem Fall? Genau, sie geben die EAN per Tastaur ein. Darum sollte die virtuelle Tastatur vielleicht wohl doch nicht verschwinden, nur weil irgendwer (der nicht Nutzer dieser Anwendung ist) sie „unschön“ findet.
LLAP 🖖
Ja, ich pflege dieses Wort. ↩︎
Hallo
An der Seite hat das Gerät einen Knopf, mit welchem man einen Barcode scannen kann. Wurde der Code erfolgreich gescannt, schreibt er diesen in ein Input-Feld. Nun eben das Problem - wenn das Input-Feld ausgewählt wurde, erscheint die virtuelle Tastatur
Nachdem ich Gunnars Posting gelesen habe, muss ich ihm bezüglich seines Einwands zustimmen. Wenn der Scan nicht funktioniert, muss der Benutzer stattdessen eine händische Eingabe durchführen können.
Was spricht gegen ein verstecktes Feld, das den Scan aufnimmt und dazu ein per JS angesteuertes Element (kein Eingabefeld), in dem das Scanergebnis optisch dargestellt wird. Die händische Eingabe erfolgt alternativ in einem normalen Input. Ob man eine händische Eingabe über die Tastatur ebenfalls in dem Feld, in dem das Scanergebnis ausgegeb en wird, anzeigen möchte, sei dahingestellt. Einerseits wäre das mit der Anzeige des Scanergebnisses konsistent, andererseits stünde die händische Eingabe unnötig doppelt da.
Zusätzlich könnte man aus der Herkunft der Eingabe (verstecktes Feld = Scan, Eingabefeld = händische Eingabe) ableiten, ob das Scannen evtl. überdurchschnittlich oft nicht funktioniert und Verbesserungsbedarf besteht.
Tschö, Auge
Hi,
Jetzt nochmal in's Blaue: Hat der Scanner etwa eine Hardwaretastatur? Sollen deren Eingaben abgefangen und in das Eingabefeld geschrieben werden?
eher nicht, vermute ich, aber die Annahme könnte dennoch zielführend sein. Viele Scanner sind nämlich so gestrickt, dass sie dem USB-Host einfach vorgaukeln, sie seien eine Tastatur, und dann beim Scannen einfach die den gescannten Zeichen entsprechenden Keycodes senden, so wie es auch eine Tastatur tun würde.
Ergo: Die Software (Web-App) muss die Tastencodes bzw. Tastatur-Events entgegennehmen und auswerten. Am einfachsten macht man das tatsächlich so, dass man ein Input-Element focussiert (kann man bei den meisten Scannern über ein Präfix konfigurieren), das dann die EIngaben aufsammelt.
Wenn man kein Input-Element verwenden will, weil Android (vielleicht auch andere Systeme) dann die in diesem Fall unerwünschte virtuelle Tastatur einblenden ... tja, dann muss man tatsächlich die Tastatur-Events selbst auswerten.
So long,
Martin
Hallo
Jetzt nochmal in's Blaue: Hat der Scanner etwa eine Hardwaretastatur? Sollen deren Eingaben abgefangen und in das Eingabefeld geschrieben werden?
eher nicht, vermute ich, aber die Annahme könnte dennoch zielführend sein. Viele Scanner sind nämlich so gestrickt, dass sie dem USB-Host einfach vorgaukeln, sie seien eine Tastatur, und dann beim Scannen einfach die den gescannten Zeichen entsprechenden Keycodes senden, so wie es auch eine Tastatur tun würde.
Nun, wie sich mittlerweile herausgestellt hat, geht es nicht um einen per USB angeschlossenen Handscanner, wie z.B. diesen hier zzgl. Tastatur und Display, sondern, so lässt zumindest das Produktbild im Katalog vermuten, um ein Android-Smartphone mit eingebauter Barcodescanfunktion.
Auf diesem Gerät soll, wenn ich das richtig verstanden habe, die Webapp laufen und dort wird bei Fokussierung eines Eingabefeldes auch die virtuelle Tastatur eingeblendet. Das stört genau dann und wohl nur dann, wenn nicht ein Code händisch eigegeben werden soll, sondern wenn ein echter™ Scan erfolgt und dessen Ergebnis an das Eingabefeld übergeben wird, wozu dieses eben unerwünscht fokussiert wird.
Tschö, Auge