Ситуация следующая: в текстовое поле вводится числовое значение, по нажатию Enter это значение передается на сервер (при помощи AJAX). Что может быть проще? Я привязал функцию обновления на событие onchange элемента input (текст). Как обычно, все идеально сработало в FireFox и Safari. А этот IE... При нажатии Enter - вообще ничего не происходило.
Объясняю: в IE Enter вызывает событие "onsubmit" формы.
Решение: input должен находиться в форме. На событие onsubmit ставим return false;
И добавляем следующий код:
processKeyEvent = function(eventType, event)
{
if (window.event)
{
event = window.event;
}
var caller_;
if (event.target)
caller_ = event.target;
if (event.srcElement)
caller_ = event.srcElement;
var code;
if (event.keyCode) code = event.keyCode;
else if (event.which) code = event.which;
switch (code)
{
case 13:
checkEnteredOrder(caller_); // наша функция для обновления
break;
}
};
processKeyPress = function(event)
{
processKeyEvent("onkeypress", event);
};Syhi-подсветка кода
{
if (window.event)
{
event = window.event;
}
var caller_;
if (event.target)
caller_ = event.target;
if (event.srcElement)
caller_ = event.srcElement;
var code;
if (event.keyCode) code = event.keyCode;
else if (event.which) code = event.which;
switch (code)
{
case 13:
checkEnteredOrder(caller_); // наша функция для обновления
break;
}
};
processKeyPress = function(event)
{
processKeyEvent("onkeypress", event);
};Syhi-подсветка кода
Затем меняем событие onchange на keypress:
input.onkeypress = processKeyPress;
Теперь все проходит через processKeyPress хэндлер, а в нем мы отлавливаем нажатую клавишу по keycode.
P.S.: Чувствую, скоро нужно будет создать отдельную категорию на блоге типа "Умри, IE поганый" или "Instant Evil"
1 комментарий:
На http://inf.by/linux/212 правильно подметили:
"Сам браузер Opera, конечно, не идеален в плане веб-разработок, но использовать его ГОРАЗДО приятнее чем IE, ради которого понаписана туча исключений в разметках и скриптах интернета."
Отправить комментарий