Ich kämpfe mit einem sehr seltsamen JavaScript-Verhalten auf einem jQuery UI-Widget Ich versuche zu beheben. IE7 (Win XP), jQuery 1.2.6 (Ja, es ist eine alte Version).IE e.keyCode - Wie kann ich zwischen kaufmännischem Und und Pfeil nach oben unterscheiden?
Das Widget ist eine Combo-Box, die Tastaturereignisse erfasst und spezielle Verhalten für die Pfeiltasten hat.
Wenn ich versuche, das Zeichen "&" in das flexbox-Eingabefeld einzugeben, bekomme ich seltsames Verhalten.
Der Flexbox hat einige Code wie:
//initialization
$myInputElement.keypress($.flexbox.process_key);
$.flexbox.process_key = function process_key(e) {
$.flexbox.flexboxFromInput(this).processKey(e);
return true;
};
//on the flexbox object's prototype:
...
processKey: function processKey(e) {
var mod = 0;
if (typeof (e.ctrlKey) !== 'undefined') {
if (e.ctrlKey) mod |= 1;
if (e.shiftKey) mod |= 2;
} else {
if (e.modifiers & Event.CONTROL_MASK) mod |= 1;
if (e.modifiers & Event.SHIFT_MASK) mod |= 2;
}
...
switch (e.keyCode) {
case 38: // up
this.prevResult();
break;
case 40: // down
if (this.getCtr().is(':visible')) this.nextResult();
else this.flexboxDelay(true);
break;
...etc.
}
}
...
Wenn ich eine Logging-Anweisung vorstellen, was ich finde, ist, dass die Taste "&" (Shift + 7) drei Tastendruck-Ereignisse erzeugt:
INFO: Flexbox> processKey, keyCode=16, ctrl=false, shift=true
INFO: Flexbox> processKey, keyCode=55, ctrl=false, shift=true
INFO: Flexbox> processKey, keyCode=38, ctrl=false, shift=true
Anscheinend ist keyCode 38 sowohl die Pfeiltaste nach oben und der ASCII-Code für Ampersand?
Während ich dies schrieb, fiel mir ein, dass ich den Tastendruck als "shift + 7" (keyCode 55) erkennen kann, um es als kaufmännisches Und-Zeichen zu behandeln, und dann eine Art Flag setzen, um den nächsten Tastendruck zu ignorieren (welches ist das 38). Das scheint ein schrecklicher Hack zu sein.
Hat jemand eine bessere Möglichkeit, zwischen Sonderzeichen wie "&" und den Pfeiltasten im IE zu unterscheiden?
Ich denke, es Bände über IE spricht, dass die Keycodes für die Pfeiltasten bilden ein wütendes trauriges Gesicht:% & '( (funktioniert besser im Kommentartext Eintrag Schrift) – RMorrisey