Подтвердить что ты не робот

Является ли "событие" зарезервированным словом в JavaScript?

Я начинаю пользоваться Javascript. И когда я практиковал, я кое-что заметил.

Возьмите эту функцию:

<script type="text/javascript">
    function showChar(sSomeData, oEvent)
    {
        alert (oEvent.keyCode);
        return true;
    }

</script>

Когда я вызываю эту функцию следующим образом:

 <input type="text" id="txtTextBox" onkeypress="return showChar('some text', oEvent);" />

Я получаю ошибку JS: "Ошибка выполнения Microsoft JScript:" oEvent "- undefined"

Но если я переименую oEvent с "событием", как:

<input type="text" id="txtTextBox" onkeypress="return showChar('some text', event);" />

Тогда он отлично работает. Мой вывод: "event" - это зарезервированное слово, которое обозначает событие аргумент в Java Script. Но когда я проверил сеть, я не видел "событие" в качестве зарезервированного слова.

Я ошибаюсь или на самом деле не задокументирован как зарезервированное слово?

Спасибо!

4b9b3361

Ответ 1

Это не зарезервированное ключевое слово, но это глобальная переменная в IE по крайней мере.

Ответ 2

Что изначально сделало это запутанным для меня, так это не понимание того, как фактически выполнялись соглашения для обработчиков событий кодирования, в сравнении с именованной переменной, в сочетании с неявными вызовами, выполняемыми обработчиками Javascript при настройке обработчиков событий следующим образом:

Хорошо 1

document.getElementById('testId').onkeypress = function(e) {
     console.log(e.which);
}

Выше, ваш браузер передает event в обработчик как функцию первого аргумента неявно, поэтому вы можете назвать свой параметр (здесь e) все, что угодно, если вы согласны, даже если вы сойдете с ума так:

Хорошо 2; с творческим названием

document.getElementById('testId').onkeypress = function(aWhopBopALuWhop) {
     console.log(aWhopBopALuWhop.which);
}

Но из-за того, что event используется как глобальный, также работает грубый код:

Красное обладание 1

document.getElementById('testId').onkeypress = function(aWhopBopALuWhop) {
     console.log(event.which);   // <<< decidedly NOT aWhopBopALuWhop
}

Итак, вы также можете увидеть двукратный код:

Красное обладание 2

document.getElementById('testId').onkeypress = function(event) {
     console.log(event.which);
}

Теперь, когда event есть event? К сожалению, это не имеет значения. Независимо от области охвата, мы ставим event в event так event === event всюду! [sic]

Но это показывает, что event не является зарезервированным словом. Это переменная. Поэтому, где вы не можете сказать break = "spam";, вы можете сказать event = "spam";. Поэтому, если вы попытаетесь использовать break, который зарезервирован, он пробит.

document.getElementById('testId').onkeypress = function(break) {
     console.log(break.which);
}

Что важно узнать (и что Ionut, по сути, говорит, я считаю,), заключается в том, что ваш браузер молча пропускает глобальную "event var в ваш обработчик onkeypress, независимо от того, что вы называете его в определении функции. Смутно, даже если вы не используете свой параметр для доступа к event внутри вашего обработчика, вы все равно можете получить доступ к event как к глобальному, как показано выше в Cruddy 1 и 2.

Теперь, когда я звонил из html-land с onkeypress, парадигмы начали смешиваться в моей голове. Здесь в ваши аргументы функции обработчика нет молчания прохождения event. Вы должны явно передать event самостоятельно, например:

<script>
    function handlerNamed(namedParam) {
        console.log(namedParam.which);
    }
</script>
<input type="text" size="10" onkeypress="handlerNamed(event)"><br />

Ни одно другое соглашение не работает!. И это работает только потому, что браузер поддерживает его, а не потому, что любой стандарт ECMAscript определяет event (afaik). Вы не можете использовать любое из приведенных ниже символов, как вы могли бы с помощью .onKeyPress, изменив имя параметра в соответствии с handlerNamed:

<!-- NONE OF THESE WORK, b/c ONLY event is defined! -->
<input type="text" size="10" onkeypress="handlerNamed(evt)"><br />
<input type="text" size="10" onkeypress="handlerNamed(e)"><br />
<input type="text" size="10" onkeypress="handlerNamed(aWhopBopALuWhop)"><br />

Имеют смысл? Я был в середине слишком сложный jsFiddle, пытаясь записать это, прежде чем он, наконец, щелкнет, если это будет полезно.

Ответ 3

Ну, код:

onkeypress="return showChar('some text', oEvent);"

Является эквивалентом следующего кода JavaScript:

element.onkeypress = function (eventObjectName) {
    return showChar('some text', eventObjectName);
};

Это просто, что браузеры называют аргумент события как event.

Итак, значение атрибута обернуто в JS-функцию, которая получает аргумент с именем event, который является объектом события.

Ответ 4

Нет, event не является зарезервированным словом. Это, однако, переменная, которая устанавливается всеми основными браузерами, когда выполняется обработчик событий (например, onkeypress) DOM node. В IE это также глобальная переменная.

Типичный кросс-браузерный способ получения события состоит в следующем.

В DOM node:

<div onclick='someFunction(event)'>Click me</div>

Функция обработки событий:

function someFunction(evt) {
  var srcElem = evt.srcElement || evt.target;

  // Code continues
}

Кстати, в вашем примере oEvent - это имя параметра и поэтому является допустимым в контексте вызываемой функции, а не в контексте вызывающего.

Ответ 6

Это старо, но, поскольку я наткнулся на это, я полагаю, что могу ответить.

http://www.w3schools.com/js/js_reserved.asp говорит, что событие НЕ является зарезервированным словом, как указано в комментариях выше. Однако, если вы читаете дальше вниз страницу....

"Зарезервированные слова Windows JavaScript можно использовать вне HTML. Его можно использовать в качестве языка программирования во многих других приложениях.

В HTML вы должны (для переносимости) избегать использования имени и объектов и свойств HTML: "

И "событие" отображается в таблице ниже. Так вы можете использовать его? Конечно. Должны ли вы использовать его? Нет. В stackoverflow есть куча примеров, которые используют событие, но они используют его для ясности. Когда вы используете этот код, вам нужно его отредактировать.