keycode & unicode
Sebastian Becker
- javascript
Hallo,
ich möchte gerne bei einem input-Feld nur ganz bestimmte Zeichen aus dem erweiterten ASCII-Zeichensatz zur Eingabe zulassen. Das funktioniert mit Abfrage des keycodes bei Tastaturen mit lateinischem Zeichensatz auch hervorragend.
Manche Nutzer haben aber z.B. japanische Tastaturen, bei denen die keycode-Abfrage offenbar nicht funktioniert - d.h. möglicherweise gibt die Tastatur überhaupt keinen keycode aus.
Wie kann ich dieses Problem umgehen?
Danke für alle Tipps, Grüße,
Sebastian
ich möchte gerne bei einem input-Feld nur ganz bestimmte Zeichen aus dem erweiterten ASCII-Zeichensatz zur Eingabe zulassen. Das funktioniert mit Abfrage des keycodes bei Tastaturen mit lateinischem Zeichensatz auch hervorragend.
Manche Nutzer haben aber z.B. japanische Tastaturen, bei denen die keycode-Abfrage offenbar nicht funktioniert - d.h. möglicherweise gibt die Tastatur überhaupt keinen keycode aus.
Vielleicht solltest Du lieber einen standardkonformen Weg gehen und per onChange bei jeder Änderung alles aus dem <input> löschen, was nicht da reingehört.
Mal abgesehen davon, daß es dann auch eher mit dem Lieblinsbrowser des Benutzers funktioniert, hast Du auch nicht das Problem, daß Dir jemand _ohne_ japanische Tastatur per Copy&Paste böse Zeichen "unterjubelt".
Gruß,
soenk.e
Hallo, soenk.e,
Vielleicht solltest Du lieber einen standardkonformen Weg gehen und per onChange bei jeder Änderung alles aus dem <input> löschen, was nicht da reingehört.
habe ich natürlich auch schon dran gedacht.
Allerdings müßte man dann genau genommen zusätzlich (nicht standardkonform) mit onPropertyChange arbeiten, falls die Eingabe aus den (zumindest im IE implementierten) Pulldownfeldern mit den letzten Eingaben (wie heißen die nochmal?) stammt.
Das Hauptproblem ist aber, daß dann der ursprüngliche Wert weg ist. Das kann bei einem Konfigurationsmenü schon ein Problem darstellen. Ich müßte daher die Feldwerte speichern und bei falschen Eingaben wiederherstellen. Das könnte den Nutzer aber irritieren.
Mal abgesehen davon, daß es dann auch eher mit dem Lieblinsbrowser des Benutzers funktioniert
Die Lieblingsbrowser meiner Nutzer kennen aber normalerweise keycodes, und falls nicht wird ja noch serverseitig geprüft ...
hast Du auch nicht das Problem, daß Dir jemand _ohne_ japanische Tastatur per Copy&Paste böse Zeichen "unterjubelt".
das kann ich ja zusätzlich abfangen ...
Meine konkrete Frage lautet: Geben "ausländische" Tastaturen für die selben Tasten wie bei deutschsprachigen Tastaturen (aber mit anderer Zeichenbelegung) den selben key code aus, oder geben sie den unicode keycode des jeweiligen Zeichens aus? Und/oder geben sie etwa gar keinen keycode für Zeichen außerhalb des erweiterten ASCII-Codes aus?
Danke, Grüße,
Sebastian
Vielleicht solltest Du lieber einen standardkonformen Weg gehen und per onChange bei jeder Änderung alles aus dem <input> löschen, was nicht da reingehört.
Allerdings müßte man dann genau genommen zusätzlich (nicht standardkonform) mit onPropertyChange arbeiten, falls die Eingabe aus den (zumindest im IE implementierten) Pulldownfeldern mit den letzten Eingaben (wie heißen die nochmal?) stammt.
Wenn man mit diesen Vorschlägen den Inhalt ändert, gibt's beim IE kein onChange-Ereignis? Was hat Microsoft denn da nun wieder für einen Unsinn zusammengeschustert?
Die Lieblingsbrowser meiner Nutzer kennen aber normalerweise keycodes,
Naja, "normalerweise" gehört diese Aussage eher in das Kapitel "selbsterfüllende Prophezeihung" :>
Meine konkrete Frage lautet: Geben "ausländische" Tastaturen für die selben Tasten wie bei deutschsprachigen Tastaturen (aber mit anderer Zeichenbelegung) den selben key code aus,
Wenn es dieselbe Type ist (ich meine nicht die Bedruckung, ich meine etwas in der Richtung "IBM-kompatibel"), dann geben sie denselben _Scancode_ aus - aber das interessiert Dich nicht. Mit den Scancodes hast Du als Anwendungsprogrammierer nie bis überhaupt nicht zu tun, weil sie keinerlei Aussage darüber machen, was auf der betreffenden Taste aufgedruckt ist. Diese Info wird vom Benutzer im Betriebssystem mittels Tastaturtabellen ("keymaps") eingestellt.
oder geben sie den unicode keycode des jeweiligen Zeichens aus? Und/oder geben sie etwa gar keinen keycode für Zeichen außerhalb des erweiterten ASCII-Codes aus?
Also mit dem Begriff "erweiterer ASCII-Code" wäre ich vorsichtig. Alles, was über den 128 ASCII-Codes liegt, ist in ISO-8859- oder Windows-Tabellen festgelegt, beziehe besser darauf.
Was Deine Frage angeht: event.keycode spuckt Unicode aus. Siehe http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/keycode.asp. (in SelfHTML steht fälschlicherweise ASCII).
Gruß,
soenk.e
Hallo, soenk.e,
Wenn man mit diesen Vorschlägen den Inhalt ändert, gibt's beim IE kein onChange-Ereignis? Was hat Microsoft denn da nun wieder für einen Unsinn zusammengeschustert?
To determine when a user updates the content of a field from the AutoComplete dialog box, use the onpropertychange event, rather than the onchange event, because the onchange event does not fire.
http://msdn.microsoft.com/workshop/author/forms/autocomplete_ovr.asp
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onpropertychange.asp
[There is no public standard that applies to this event.]
Was Deine Frage angeht: event.keycode spuckt Unicode aus. Siehe http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/keycode.asp. (in SelfHTML steht fälschlicherweise ASCII).
Aber bei Microsoft steht auch folgendes:
As of Microsoft® Internet Explorer 4.0, the onkeypress
event fires and can be canceled for the following keys:
Letters: A - Z (uppercase and lowercase)
Numerals: 0 - 9
Symbols: ! @ # $ % ^ & * ( ) _ - + = < [ ] { } , . / ? \ | ' ` " ~
System: ESC, SPACEBAR, ENTER
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/keycode.asp
Soll ich daraus schließen, daß nur für diese Zeichen Unicode ausgegeben wird?
Grüße,
Sebastian
Wenn man mit diesen Vorschlägen den Inhalt ändert, gibt's beim IE kein onChange-Ereignis? Was hat Microsoft denn da nun wieder für einen Unsinn zusammengeschustert?
To determine when a user updates the content of a field from the AutoComplete dialog box, use the onpropertychange event, rather than the onchange event, because the onchange event does not fire.
Na hurra.
Was Deine Frage angeht: event.keycode spuckt Unicode aus. Siehe http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/keycode.asp. (in SelfHTML steht fälschlicherweise ASCII).
Aber bei Microsoft steht auch folgendes:
As of Microsoft® Internet Explorer 4.0, the onkeypress
event fires and can be canceled for the following keys:Letters: A - Z (uppercase and lowercase)
Numerals: 0 - 9
Symbols: ! @ # $ % ^ & * ( ) _ - + = < [ ] { } , . / ? \ | ' ` " ~
System: ESC, SPACEBAR, ENTER
Soll ich daraus schließen, daß nur für diese Zeichen Unicode ausgegeben wird?
Ja, bzw. in dem Fall kannst Du auch bei "ASCII" bleiben, denn die unteren 128 Zeichen entsprechend in den meisten Zeichensätzen (inklusive Unicode) den 128 Zeichen im ASCII-Zeichensatz. Und zitierte Zeichen sind allesamt an Positionen zwischen 0 und 127 zu finden.
Gruß,
soenk.e