Мне нужно передать объект события и объект возникновения события в функцию обработки. Я считаю, что я понимаю, как внешний Javascript работы:Как браузер обрабатывает встроенные события javascript?
<input id="input2"/>
<script>
function getKey2(e) { alert(this.id+e.keyCode); }
document.getElementById("input2").onkeypress = getKey2;
</script>
OnKeyPress метод определяется на Input2 DOM, поэтому этот указывает на него и объект события передается в качестве первого аргумента функции. Но я путать с рядный Javascript:
<input id="input1" onkeypress="getKey1(this,event)"/>
<script>
function getKey1(obj,e) {
alert(obj.id+e.keyCode);
}
</script>
Первый аргумент, это, должно быть Window объект, но когда он копируется в OBJ на события, это объект события происхождения , input1 от DOM. Второй аргумент, событие, должен быть глобальным объектом события, но при вызове объект события передается функции. Видимо, моя дедукция неверна - как работает звонок?
Короче говоря: почему значения объектов в следующих символах не совпадают?
| name object value
----------------------------------
in onkeypress | this Window
in getKey1 | obj DOM input1
| name object value
----------------------------------
in onkeypress | event global event
in getKey1 | e keypress event
Поскольку браузеры могут связывать правильные значения? –
@DaveNewton сарказм? Я знаю, что это самые основы Javascript, но браузеры связывают любые другие значения? Есть ли какой-либо стандарт, описывающий это? –
Это не сарказм, так оно и работает. Вы устанавливаете обработчик событий для определенного элемента DOM. Это строка, нет причин, чтобы «это» и «событие» не были связаны правильно. Это не выполняется * при анализе DOM. –