"event" 对象在 javascript 函数中被识别而不通过它?
"event" object is recognized without passing it, in javascript function?
在按下 link 时,我正在调用 javascript 函数
<a id="eventFiringLink" href="javascript:functionName()">
在按钮代码的另一个地方,我将 functionName()
函数绑定为点击事件的侦听器。
<button id="someButton">
通过jquery
绑定点击事件
$("#someButton").bind('click',functionName);
功能描述如下,
functionName(e)
{
if(event.target.id== "eventFiringLink")
{
console.log("do this");
}
else
{
console.log("do that");
}
}
当我点击 link 时,我以为我会得到
"TypeError: Cannot read property 'target' of undefined",
但令我惊讶的是,代码被执行并打印出来了
"do this"
在控制台中。
这怎么可能?
您正在访问全局 window.event
。对该对象的支持因浏览器而异。
见http://www.quirksmode.org/js/events_access.html
jQuery 传递的参数已规范化以避免这些浏览器不一致,但正如您所意识到的,您没有访问该参数,因此您获取的是原始全局事件对象。
您实际上是在访问全局对象的 属性,即 window。所以当你访问事件时,它实际上是 window.event。
但请注意,现代浏览器可能并不都支持这一点,因为这是浏览器事件处理机制的内部机制,建议将事件作为参数。事实上,在大多数跨浏览器库中,访问事件对象的常用方法如下:
if(!e){ e = window.event; }
在按下 link 时,我正在调用 javascript 函数
<a id="eventFiringLink" href="javascript:functionName()">
在按钮代码的另一个地方,我将 functionName()
函数绑定为点击事件的侦听器。
<button id="someButton">
通过jquery
绑定点击事件$("#someButton").bind('click',functionName);
功能描述如下,
functionName(e)
{
if(event.target.id== "eventFiringLink")
{
console.log("do this");
}
else
{
console.log("do that");
}
}
当我点击 link 时,我以为我会得到
"TypeError: Cannot read property 'target' of undefined",
但令我惊讶的是,代码被执行并打印出来了
"do this"
在控制台中。
这怎么可能?
您正在访问全局 window.event
。对该对象的支持因浏览器而异。
见http://www.quirksmode.org/js/events_access.html
jQuery 传递的参数已规范化以避免这些浏览器不一致,但正如您所意识到的,您没有访问该参数,因此您获取的是原始全局事件对象。
您实际上是在访问全局对象的 属性,即 window。所以当你访问事件时,它实际上是 window.event。 但请注意,现代浏览器可能并不都支持这一点,因为这是浏览器事件处理机制的内部机制,建议将事件作为参数。事实上,在大多数跨浏览器库中,访问事件对象的常用方法如下:
if(!e){ e = window.event; }