Ключевое слово события в js - PullRequest
       2

Ключевое слово события в js

14 голосов
/ 11 февраля 2011

Я нашел этот код в Chrome, FF и т. Д. Тем не менее, я не могу найти никаких ссылок на ключевое слово "magic" event в Интернете. Смотри это

<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>

Этот сценарий останавливается, если я заменяю event в скобках на что-то другое. Это устаревшее ключевое слово?

Ответы [ 4 ]

16 голосов
/ 11 февраля 2011

Объект Event автоматически передается всем обработчикам событий. Если вы добавляете обработчики событий с addEventListener, вы можете выбрать имя параметра (как вы сделали в handler). Но для кода, связанного с атрибутом onclick, вы можете получить доступ к объекту события только через неявную переменную event.

Если вы хотите узнать больше об обработке событий в целом, я предлагаю прочитать об этом на quirksmode.org .

Также взгляните на MDC - Обработчики событий :

Эти свойства соответствуют атрибутам события «on» в HTML.

В отличие от соответствующих атрибутов, значения этих свойств являются функциями (или любым другим объектом, реализующим интерфейс EventListener), а не строкой. Фактически, присвоение атрибута события в HTML создает функцию-оболочку вокруг указанного кода. Например, с учетом следующего HTML:

<div onclick="foo();">click me!</div>

Если element является ссылкой на этот div, значение element.onclick эффективно:

function onclick(event) {
   foo();
}

Обратите внимание, как объект события передается в качестве параметра event этой функции-обертке.

4 голосов
/ 11 февраля 2011

Когда установлен атрибут события, создается неявная функция с event в качестве первого аргумента.Когда событие запускается, объект события передается этой функции.Точного определения этого поведения не было до HTML 5 (который все еще является черновиком), но так было в течение долгого времени в основных браузерах, и именно так оно превратилось в спецификацию:

Когда вызывается объект Function обработчика события, его обратный вызов call() должен быть вызван с одним аргументом, установленным для объекта Event рассматриваемого события.

Этот аргумент является удачнымназванный event по очевидным причинам.http://www.w3.org/TR/html5/webappapis.html#events

1 голос
/ 14 июня 2016

Это действительно бросило меня.Следующая опечатка работает в Chromium, но не в FF:

some_worker.onmessage = function(e) {

    // do stuff

    if (e.data instanceof ArrayBuffer)
        intArray = new Uint8Array(event.data);

    // do other stuff
};

Chromium обнаружил неявное ключевое слово для «события», но FF выдал ошибку «неопределенная переменная»!Просто изменил 'event' на 'e', ​​и все хорошо.

Я заметил, что даже разметка кода в stackoverflow рассматривает 'event' как неявное ключевое слово ... не для того, чтобы сбить FF, поскольку он обнаружил опечатку.

0 голосов
/ 11 февраля 2011

Полагаю, вы пытаетесь передать элемент HTML, на который нажали, вашей функции handler().Правильный способ сделать это в вашем коде: <h1 onclick="handler(this);">Click on this text</h1>

Однако я настоятельно рекомендую избегать такого подхода.Избегайте определения стиля и поведения в HTML.Пожалуйста, прочитайте следующую статью: Ненавязчивый JavaScript

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