Ключевое слово события в js
Я нашел, что этот код работает в chrome, ff и т.д. Однако я не могу найти ссылки на ключевое слово event
в Интернете. См. this
<html>
<head>
<script type="text/javascript">
function handler(e)
{
alert(e);
}
</script>
</head>
<body>
<h1 onclick="handler(event);alert(0)">Click on this text</h1>
</body>
</html>
Эти скрипты STOPS работают, если я изменяю event
в скобках на что-то другое. Это устаревшее ключевое слово?
Ответы
Ответ 1
Объект Event
автоматически передается всем обработчикам событий. Если вы добавите обработчики событий с помощью addEventListener
, вы можете выбрать имя параметра (как вы делали в handler
). Но для кода, связанного с атрибутом onclick
, вы можете получить доступ только к объекту события через неявную переменную Event
.
Если вы хотите узнать больше об обработке событий в целом, я предлагаю прочитать об этом в quirksmode.org.
Также смотрите MDC - обработчики событий:
Это свойства, соответствующие атрибутам событий HTML 'on'.
В отличие от соответствующих атрибутов, значения этих свойств являются функциями (или любым другим объектом, реализующим интерфейс EventListener), а не строкой. Фактически, назначение атрибута события в HTML создает функцию-оболочку вокруг указанного кода. Например, учитывая следующий HTML:
<div onclick="foo();">click me!</div>
Если element
является ссылкой на этот div
, значение element.onclick
эффективно:
function onclick(event) {
foo();
}
Обратите внимание, как объект события передается как параметр Event
на эту функцию-обертку.
Ответ 2
Когда установлен атрибут события, в качестве первого аргумента создается неявная функция с event
. Когда событие срабатывает, объект события передается этой функции. Не было четкого определения этого поведения до тех пор, пока HTML 5 (который все еще представляет собой черновик), но так долго в основных браузерах и как он превратился в спецификацию:
Когда объект-обработчик события вызывается, его обратный вызов call()
должен быть вызван одним аргументом, установленным в event
объект соответствующего события.
Этот аргумент метко назван event
по понятным причинам. http://www.w3.org/TR/html5/webappapis.html#events
Ответ 3
Это действительно бросило меня. Следующая "опечатка" работает в Chromium, но не FF:
some_worker.onmessage = function(e) {
// do stuff
if (e.data instanceof ArrayBuffer)
intArray = new Uint8Array(event.data);
// do other stuff
};
Хром наблюдал неявное ключевое слово для "события", но FF выбрал ошибку "undefined"! Просто изменилось "событие" на "е", и все хорошо.
Я замечаю, что даже разметка кода stackoverflow замечает "событие" как неявное ключевое слово... не сбить FF, так как он обнаружил опечатку.
Ответ 4
Я думаю, вы пытаетесь передать щелкнутый элемент HTML в свою handler()
функцию. Правильный способ сделать это: ваш код:
<h1 onclick="handler(this);">Click on this text</h1>
Однако я настоятельно рекомендую избегать такого подхода. Избегайте создания стиля и поведения, определенных в HTML. Пожалуйста, прочитайте следующую статью:
Ненавязчивый JavaScript