Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. попытайтесь получить событие, используя переданный параметр (в данном случае он называется 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
}
}
У Chrome тоже нет его. Вместо того, чтобы каждый триггер события передавал свой собственный объект события, IE сбросил свойства в window.event и передал это. Это сработало, потому что вы когда-либо имели дело с одним событием за раз. То, что должен иметь каждый браузер, - это window.Event, который является фактическим конструктором для объектов событий. Если вы видите «window.event» где угодно, кроме IE8 и ниже, попробуйте открыть консоль на пустой вкладке и зарегистрировать или предупредить ее там. Скорее всего, что-то добавить его вручную на странице вы смотрите на
Если вы посмотрите на броузеры нормализующего кода для обработчиков событий, вы часто будете видеть:.
if(!e){ e = window.event; }
Это событие нормализует код обработки старых версий IE. В современных браузерах e должен быть собственным объектом, передаваемым через аргументы, а не ссылкой на свойство окна.
window.event
не является особенностью, это ошибка!
Цитата MDN :
window.event
является запатентованным Microsoft Internet Explorer, доступное только при вызове обработчика событий DOM. Его значение - это объект Event, который в настоящее время обрабатывается.И самое главное:
Не является частью какой-либо спецификации.
window.event
является нестандартным, поэтому не ожидайте, что будут поддерживаться любые браузеры .Первым параметром функции обратного вызова в
element.addEventListener()
является объектEvent
, Используйте его вместоwindow.event
.
Поскольку window.event
не существует в Firefox. Это потому, что браузер имеет разные модели событий, и вам придется иметь дело с их различиями или использовать библиотеку, такую как jQuery, чтобы не иметь дело со всеми различиями между браузерами. Добро пожаловать в DOM.
exampl:function(e) {if (window.event && !e) e=window.event;var ref=e.target||e.srcElement;}
. – anony_root 22 March 2012 в 00:11e
? почему бы вам не просто использоватьe
всегда – Simon_Weaver 31 July 2015 в 21:35