Я тоже столкнулся с этой проблемой.Я обнаружил, что IE7 не имеет члена keyChar в своей реализации объекта события .Таким образом, он пытается оценить event.keyChar, получает ноль и ничего не делает.Вместо этого keyCode является неоднозначным, возвращая либо ascii keyChar, либо код клавиши нажатой клавиши ... тьфу.Поскольку мне приходилось ловить как специальные ключи, так и ключи, привязанные к символам, это было мое решение.
onkeydown отмените keyCode и сохраните в постоянном объекте
myObject.kSave=-event.keyCode;
ПОЧЕМУ?потому что в этот момент вы не знаете, является ли клавиша символом или специальной клавишей !!!
при нажатии Событие onkeypress может не сработать, если клавиша является специальной клавишей.По этой причине моя стратегия использует onkeyup для обработки специальных клавиш и управляющих символов и использует onkeypress для обработки символов, отличных от управляющих символов.Когда ключ является символом, event.keyChar содержит символ, и его значение больше 0. Однако, поскольку IE7 не имеет члена event.keyChar, используйте в качестве символа event.keyCode.Вы можете принудительно обрабатывать все управляющие символы (например, enter, esc, tab и т. Д.) Как специальный ключ, предотвращая поведение управляющих символов по умолчанию и откладывая обработку до onkeyup.Чтобы сигнализировать о том, что символ был обработан, мы должны установить для сохраненного объекта тот символ, который мы нашли.
var ch = (event.keyChar == null) ? event.keyCode : event.keyChar;
if (ch >=32) {//ch is a character and not a control character
myObject.kSave = ch; //tells onkeyup that the key was handled
event.preventDefault(); //don't let default processing mess with your handler
switch(ch) {
//your character handler goes here
}
} else if (ch > 0) {//ch is a control character
event.preventDefault();
}
onkeyup Добавьте сохраненное значение в event.keyCode.Если сумма равна нулю, событие onkeypress не обрабатывает нажатие клавиши, потому что нажатая клавиша была специальной клавишей или управляющим символом.Когда сумма положительна, больше ничего не нужно делать, потому что ключ был символом, и обработчик события onkeypress уже позаботился об этом.
if (myObject.kSave+event.keyCode == 0) {//this is a special key or control character
event.preventDefault();
switch(event.keyCode) {
//handle special keys here
}
}
И последнее, что в вашем обработчике события вызовите event.preventDefault() если вы не хотите, чтобы обработчик по умолчанию связывался с вашим обработчиком событий.