Почему event.pageX не работает в Firefox? [Дубликат]

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

28
задан chŝdk 12 May 2015 в 10:07
поделиться

5 ответов

попытайтесь получить событие, используя переданный параметр (в данном случае он называется 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    

  }
}
21
ответ дан Joseph 19 August 2018 в 08:10
поделиться
  • 1
    Должен ли я изменить свой «addEventListener» ?? – anony_root 22 March 2012 в 00:04
  • 2
    нет, он остается прежним. – Joseph 22 March 2012 в 00:04
  • 3
    Спасибо! Это было очень полезно для меня, потому что теперь он работает в FF: exampl:function(e) {if (window.event && !e) e=window.event;var ref=e.target||e.srcElement;}. – anony_root 22 March 2012 в 00:11
  • 4
    Но evt не то же самое по сравнению с хром и FF. Так что этот ответ неверен, так как я ожидаю такой же ответ ... – xcy7e 웃 16 July 2015 в 14:33
  • 5
    Я не понимаю - не будет ли Chrome / IE предоставлять e? почему бы вам не просто использовать e всегда – Simon_Weaver 31 July 2015 в 21:35

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

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

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

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

3
ответ дан Erik Reppen 19 August 2018 в 08:10
поделиться

window.event не является особенностью, это ошибка!

Цитата MDN :

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

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

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

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

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

14
ответ дан Michał Perłakowski 19 August 2018 в 08:10
поделиться
  • 1
    Это указывало мне в правильном направлении! Мне нужно было получить как событие click, так и вторичный аргумент. Как вы говорите, первым аргументом функции должно быть событие, и вам нужно включить его в свой вызов функции; как в onclick = 'myClickEvent (event, mySecondAttr);' – SteinIP 27 May 2016 в 08:20

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

14
ответ дан Tim Down 19 August 2018 в 08:10
поделиться
0
ответ дан Matthieu Riegler 30 October 2018 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: