Estoy peleando con un comportamiento de JavaScript muy extraño en un widget de jQuery UI que estoy tratando de corregir. IE7 (win XP), jQuery 1.2.6 (sí, es una versión anterior).IE e.keyCode - ¿Cómo puedo diferenciar entre ampersand y up-arrow?
El widget es un cuadro combinado, que captura los eventos del teclado y tiene comportamientos especiales para las teclas de flecha.
Cuando intento escribir el carácter "&" en el campo de entrada de la caja flexible, obtengo un comportamiento extraño.
El FlexBox tiene algún código como:
//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.
}
}
...
Cuando presento una declaración de registro, lo que encuentro es que al pulsar "&" (shift + 7) produce tres eventos de pulsación:
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
Aparentemente, el código de clave 38 es la tecla de flecha hacia arriba y el código ASCII para el signo &?
Mientras escribía esto, se me ocurrió que podía detectar la pulsación de tecla como "shift + 7" (código clave 55) para tratarla como la tecla ampersand, luego establecer algún tipo de indicador para ignorar la siguiente tecla (cual es el 38). Esto parece un hack horrible.
¿Alguien tiene una mejor manera de diferenciar entre caracteres especiales como "&" y las teclas de flecha en IE?
Creo que dice mucho sobre IE que los códigos de las teclas de flecha forman una cara triste enojada:% & '( (funciona mejor en la fuente de entrada de texto de comentario) – RMorrisey