Ключевое слово события в 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