Firefox: событие HTML keyUp не содержит данных события - PullRequest
1 голос
/ 08 июня 2011

Событие onKeyUp работает в IE (7), а не в Firefox (4.0.1).

У меня есть текстовое поле с атрибутом onclick = "eventName ();" в функции JavaScript eventName (evt) у меня нет данных о событии, данные о событиях не отправляются firefox. В IE, с другой стороны, окно window.event заполнено, поэтому оно работает ...

И IE, и Firefox прекрасно справляются с этой задачей. Единственная проблема в том, что мне нужны данные о событиях там. Кто-нибудь может направить меня к решению этой надоедливой проблемы?

Пример страницы:

<html>
<head>
    <script type="text/javascript">
        function upperCase(evt) { 
            if (evt) {
                var target = evt.target;
                target.value = target.value.toUpperCase();
            } else if (window.event) {
                var target = window.event.srcElement;
                target.value = target.value.toUpperCase();
            } else alert('No event information');
        }
    </script>
</head>
<body>
    <span>Enter your name: </span>
    <input type="text" id="fname" onkeyup="upperCase()" />
</body>
</html>

Ответы [ 3 ]

1 голос
/ 08 июня 2011

Чтобы это работало во всех браузерах, передайте event вызываемой функции:

<input type="text" id="fname" onkeyup="upperCase(event)">

function upperCase(evt) { 
  if (evt) {
    var target = evt.target;
    target.value = target.value.toUpperCase();
  } else if (window.event) {
    var target = window.event.srcElement;
    target.value = target.value.toUpperCase();
  } else alert('No event information');
}
<input type="text" id="fname" onkeyup="upperCase(event)">

В некоторых браузерах, таких как IE, это работает, потому что event преобразуется в window.event, что всегда относится к текущему обрабатываемому событию.В других браузерах (таких как Firefox) это работает, потому что event - это переменная, которая находится в области действия для обработчика событий.Вы можете представить себе содержимое атрибута onkeyup как тело функции, которая выглядит как

function(event) {
    // Attribute value here
}
1 голос
/ 08 июня 2011

IE обрабатывает события с глобальным. Все остальное событие передается в качестве первого аргумента функции.

onkeyup="upperCase()"

Ты ничего с этим не делаешь. Я даже не уверен, что вы можете - я не коснулся атрибута внутреннего события ни для чего, кроме самой тривиальной игрушки за последние годы.

С учетом

document.getElementById('fname').keyup = upperCase;

(или, лучше, используя attachEvent / addEvent, будет заполнена переменная evt.)

0 голосов
/ 08 июня 2011

Вы забыли передать событие как параметр, должно быть:

<input type="text" id="fname" onkeyup="upperCase(event)" />
...