Walczę z bardzo dziwnym zachowaniem javascript na widżecie interfejsu JQuery UI, który próbuję naprawić. IE7 (win XP), jQuery 1.2.6 (tak, to stara wersja).IE e.keyCode - Jak odróżnić ampersand i up-arrow?
Widżet to pole kombi, które przechwytuje zdarzenia na klawiaturze i ma specjalne zachowania dla klawiszy strzałek.
Kiedy próbuję wpisać znak "&" w polu wejściowym Flexbox, pojawia się dziwne zachowanie.
schematu flexbox ma jakiś kod jak:
//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.
}
}
...
Kiedy przedstawić oświadczenie rejestrowania, co uważam, że naciśnięcie "&" (shift + 7) produkuje trzy keypress zdarzenia:
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
Wygląda na to, że keyCode 38 jest jednocześnie strzałką w górę i kodem ASCII dla ampersand?
Kiedy to pisałem, przyszło mi do głowy, że mogę wykryć naciśnięcie klawisza jako "shift + 7" (keyCode 55), aby potraktować go jako klawisz ampersand, a następnie ustawić flagę, aby zignorować następne naciśnięcie klawisza (który jest 38). To wygląda na okropne włamanie.
Czy ktoś ma lepszy sposób na odróżnienie znaków specjalnych, takich jak "&" i klawiszy strzałek w IE?
Myślę, że mówi wiele o IE, że klucze do klawiszy strzałek tworzą smutną, smutną twarz:% & '( (działa lepiej w czcionce tekstu komentarza) – RMorrisey