浏览器如何处理内联javascript事件?

Jan*_*roň 3 javascript javascript-events

我需要将事件对象和事件源对象传递给处理函数.我相信我理解外部JavaScript是如何工作的:

<input id="input2"/>
<script>
function getKey2(e) { alert(this.id+e.keyCode); }
document.getElementById("input2").onkeypress = getKey2;
</script>
Run Code Online (Sandbox Code Playgroud)

该onkeypress事件方法被限定在输入2 DOM,因此指向它和事件对象作为第一个参数传递给函数.但我对内联javascript感到困惑:

<input id="input1" onkeypress="getKey1(this,event)"/>
<script>
function getKey1(obj,e) {
    alert(obj.id+e.keyCode);
}
</script>
Run Code Online (Sandbox Code Playgroud)

第一个参数,这个,应该是窗口对象,但是当它被复制到OBJ上的事件,它是事件源对象中,输入1从DOM.第二个参数event应该是全局事件对象,但是在调用时,会将事件对象传递给函数.显然,我的推论是错误的 - 通话如何运作?

长话短说:为什么以下字符中的对象值不一样?

              | 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
Run Code Online (Sandbox Code Playgroud)

在这里小提琴

use*_*674 6

W3C DOM规范规定了内联事件的两个绑定:

  1. this绑定到内联事件定义的元素;
  2. event引入了具有名称的局部变量.(IE不会这样做,但相同的语法适用于内联事件,因为eventwindow.event在IE中处理.)

在HTML5中,信息隐藏在6.1.6.1事件处理程序下.这两部分分散开来:

当设置事件处理程序内容属性时[即,当设置内联事件时] ..让合成函数声明的body []为事件处理程序内容属性的新值.让函数有一个名为event的参数.[注意这onerror是特别的.]

.. 让Scope [或this]成为NewObjectEnvironment(元素的对象,Scope)的结果.[这与其他环境上下文链接,例如表单(如果存在)和全局上下文.]