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)
W3C DOM规范规定了内联事件的两个绑定:
this绑定到内联事件定义的元素;event引入了具有名称的局部变量.(IE不会这样做,但相同的语法适用于内联事件,因为event将window.event在IE中处理.)在HTML5中,信息隐藏在6.1.6.1事件处理程序下.这两部分分散开来:
当设置事件处理程序内容属性时[即,当设置内联事件时] ..让合成函数声明的body []为事件处理程序内容属性的新值.让函数有一个名为event的参数.[注意这
onerror是特别的.].. 让Scope [或
this]成为NewObjectEnvironment(元素的对象,Scope)的结果.[这与其他环境上下文链接,例如表单(如果存在)和全局上下文.]