$ (window) .keypress (function ()) не работает в IE7? - PullRequest
5 голосов
/ 17 февраля 2011

Это событие нажатия клавиш прекрасно работает для меня в Chrome и Firefox, но просто не воспринимается вообще в IE7:

$(window).keypress(function(e) {
    alert('hello world');
});

Кто-нибудь знает альтернативы IE7?

Или это ошибка выше в моем JavaScript, что означает, что она не обнаруживается в IE7 - в таком случае, как я могу ее отладить?В IE включены ошибки сценариев, но ничего не появляется.

Ответы [ 4 ]

27 голосов
/ 17 февраля 2011

IE не поддерживает ключевые события на window.

Вместо этого поместите его на document.

$(document).keypress(function(e) {
    alert('hello world');
});
2 голосов
/ 17 февраля 2011

В настоящее время у меня нет IE7 для его тестирования, но я считаю, что вам нужно назначить обработчик событий для $ (document) вместо $ (window).Что-то вроде:

$(document).keypress(function(e) {
    alert("hello world");
});
0 голосов
/ 07 июня 2013

Я тоже столкнулся с этой проблемой.Я обнаружил, что 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() если вы не хотите, чтобы обработчик по умолчанию связывался с вашим обработчиком событий.

0 голосов
/ 17 февраля 2011

Пара вещей, которые нужно попробовать:

1: обернуть ваш код события в событие document.onready, например:

jQuery(function()
{
    $(window).keypress(function(e)....
});

Таким образом, ваше событие не будет прикреплено до DOMзагрузка завершена.

2: Прикрепите ваше событие к телу или документу вместо окна:

jQuery(function()
{
    $("body").keypress(function(e)....
    $(document).keypress(function(e)....
});

(У меня нет оснований думать, что это будет работать, я простосделано, когда по какой-то причине события не возвращаются к документу или окну.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...