Hi
Hier steht "Konqueror 3.1 kennt die Eigenschaft keyCode noch nicht. Mozilla Firefox 1.0 kennt die Eigenschaft keyCode zwar, sie enthält jedoch nur bei den Ereignissen keyup und keydown sinnvolle Werte. Bei keypress-Ereignissen hat die Eigenschaft bei normalen Tasten, z.B. Buchstaben, immer den Wert 0. Die Eigenschaft nach unten which liefert immer den korrekten Tastencode, daher sollte Sie zunächst die Existenz jener Eigenschaft abfragen."
Also:
Die Liste welcher Browser welche Eigenschaft unterstützt, findest du hier. Dazu brauchst du auch kein englisch, imo.
keyCode unterstützen beim keydown/up Event eigentlich alle modernen Browser.
Beim keypress steckt der CharacterCode in charCode (FF) oder in keyCode (IE).
which kennt auch FF, und ist soweit ich weiß nur so das Überbleibsel aus Netscape 4 Zeiten.
Mag sein, dass z.B. alte Konquerer Browser auch which kennen.
"Konqueror 3.1 kennt die Eigenschaft keyCode noch nicht." passt nicht ganz mit der Tabelle auf quirksmode.org.
Hab da jetzt auch keine Ahnung.
charCode scheint in SelfHTML gar nicht dokumentiert zu sein (?).
Generell ist es so, dass beim keydown event der Tastencode übergeben wird, und beim keypress der Character code.
D.h. wenn du die 1 oben tippst, und dann die 1 auf dem NumPad, dann sind es verschiedene Tasten (verschiedener Tastencode), aber gleich Werte (charCode).
Also nehm ich auch which denk ich mir. Oder ist das falsch? Das wird aber wieder nicht vom Browser unterstützt laut der Liste hier.
nicht vom IE, ja.
Also doch wieder zurück zu keyCode.
und damit angefangen:
funktion onlyNum(key) {
var key = key.keyCode /* ... */
>
> [keyCode](http://de.selfhtml.org/javascript/objekte/event.htm#key_code) wird laut der Liste aber nicht vom FF unterstützt also wieder zum [which](http://de.selfhtml.org/javascript/objekte/event.htm#which) und das berücksichtigt:
Zitat:
==
Mozilla Firefox 1.0 kennt die Eigenschaft keyCode zwar, sie enthält jedoch nur bei den Ereignissen keyup und keydown sinnvolle Werte.
==
Ja, und beim keypress steckt der sinnvolle Wert in charCode bzw. which.
> if(!key.match(/^\d$/)){ // sollte eintreten wenn etwas ausser 0-9 getippt wurde
> /\* Tja, was mach ich jetzt hier....? \*/
> }
"Hier" musst du dann das Standardverhalten des Browsers, der auch auf das Event reagiert, in dem ein Zeichen in die Textbox schreibt, verhindern.
> Komm ich der Sache jetzt langsam näher?
vielleicht :-)
> Wie unterdrück ich jetzt den Eintrag der gedrückten Taste in das Formularfeld? Mit return false; meintest du?
Es gibt eigentlich 3 Arten der Eventregistrierung:
1\. inline im HTML Code als Attribut:
onkeypress="test(event)"
Hier ist das EventObjekt bei allen Browsern in der Variablen "event", die auch immer so heißen muss.
2\. im JavaScript Code auf klassische Art
document.onkeypress = function(e)
{
e = e || window.event;
};
Hier steckt des Event Objekt automatisch als erstes Argument in der Funktion.
IE hat es allerding in window.event. Daher die Abfrage.
3\. im JavaScript Code über addEventListener/attachEvent
document.addEventListener("keypress", function(e)
{
}
,false);
Das ist der standard. Das Event Objekt wird auch hier wieder automatisch übergeben. false gibt an, dass das event in der Bubbling-Phase verarbeitet wird... nimms einfach so hin ;-)
document.attachEvent("onkeypress", function(e)
{
}
);
Das versteht der IE. "on" muss vor das event noch. Das Event Objekt wird auch hier übergeben.
Bei 1. und 2. nimmst du return false.
Bei 1. dann aber auch onkeypress="return funktion()" schreiben.
Bei 3. nimmst du e.preventDefault() (standard) oder e.returnValue = false (IE).
klar?
Das EventHandling ist halt leider das komplizierteste in der ClientProgrammierung... weil es so vieles gibt, und dann noch die Browser unterschiede hinzukommen. Aber ist wohl historisch so gewachsen.
Gruß!