Почему FF говорит, что window.event не определено?(вызов функции с добавленным слушателем событий) - PullRequest
29 голосов
/ 22 марта 2012

У меня проблема в этой части:

var ex = {
  exampl: function(){
    var ref=window.event.target||window.event.srcElement; // here
    alert(ref.innerHTML); // (example)
  }
}

Эта функция вызывается так:

document.body.childNodes[0].addEventListener('mouseover',ex.exampl,true);

Только Firefox говорит, что window.event не определено ...

Я не знаю, что делать, чтобы это работало. Он очень хорошо работает в браузерах WebKit и Opera (я не могу проверить это в MSIE, и мне все равно).

Почему это происходит?

Ответы [ 6 ]

22 голосов
/ 22 марта 2012

попробуйте получить событие, используя переданный параметр (в данном случае с именем e). Я проверил это, и оба window.event и e поддерживаются в Chrome.

попробуйте проверить оба, в зависимости от того, что существует

var ex = {
  exampl: function(e){

    console.log(window.event);
    console.log(e);  

    //check if we have "e" or "window.event" and use them as "evt"
    var evt = e || window.event    

  }
}
16 голосов
/ 29 декабря 2015

window.event это не функция, это ошибка!

Цитирование MDN :

window.event являетсяСобственное свойство Microsoft Internet Explorer, которое доступно только во время вызова обработчика событий DOM.Его значением является объект Event, который в данный момент обрабатывается.

И самое главное:

Не является частью какой-либо спецификации.

window.eventне является стандартным, поэтому не ожидайте, что любой браузер его поддержит.

Первый параметр функции обратного вызова в element.addEventListener() - это объект Event.Используйте его вместо window.event.

15 голосов
/ 22 марта 2012

Потому что window.event не существует в Firefox. Это потому, что в браузере есть разные модели событий, и вам придется иметь дело с их различиями или использовать библиотеку, такую ​​как jQuery, чтобы не иметь дело со всеми различиями между браузерами. Добро пожаловать в DOM.

5 голосов
/ 22 марта 2012

Chrome также не имеет его изначально.Вместо того чтобы каждый триггер события передавал свой собственный объект события, IE сбрасывал свойства в window.event и передавал его.Это сработало, так как вы имеете дело только с одним событием за раз.Каждый браузер должен иметь window.Event, который является фактическим конструктором объектов событий.Если вы видите «window.event» где-нибудь, кроме IE8 и ниже, попробуйте открыть консоль на пустой вкладке и войти в систему или предупредить ее там.Скорее всего, что-то добавляется вручную на странице, которую вы просматриваете.

Если вы посмотрите на нормализующий код для обработчиков событий, вы часто будете видеть:

if(!e){ e = window.event; }

Это событиенормализует обработку кода старых версий IE.В современных браузерах e должен быть своим собственным объектом, передаваемым через аргументы, а не ссылкой на свойство окна.

0 голосов
/ 23 ноября 2018

использовать jQuery ..

let e = $.Event();

https://api.jquery.com/category/events/

0 голосов
/ 18 сентября 2018

window.event будет доступен на Firefox с версии 63 (выпуск ожидается в конце октября 2018 года).

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