事件对象在此代码中的工作原理
How does an event object work in this code
window.onload = unblurMonaLisa;
function unblurMonaLisa() {
var images = document.getElementsByTagName("img");
for (var i = 0; i < images.length; i++) {
images[i].onclick = showAnswer;
}
};
function showAnswer(eventObj) {
var image = eventObj.target;
var name = image.id;
name = name + ".jpg";
image.src = name;
};
上面的代码将模糊图像切换为单击所述图像时不模糊的图像。代码工作得很好。我的问题是关于传递给showAnswer
函数的eventObj
。在此代码中何时创建eventObj
?eventObj
的范围是本地的吗?如果我将onclick
事件分配给两个不同的变量,是否会创建两个eventObj
如果是这样,我将如何分别访问它们?
在此代码中何时创建"eventObj"?
当您感兴趣的事件发生时,在本例中为 click
,您的回调函数由环境自动执行。执行回调函数时,会为其提供event object
作为参数,您可以选择在函数签名中忽略它。(即您的showAnswer
函数可以像这样function showAnswer() {...}
)。event object
是一个常规对象,用于保存有关刚刚发生的事件的信息。
"eventObj"的范围是本地的吗?
是的,它是。
如果我将 onclick 事件分配给两个不同的变量
不能使用 .onclick
添加两个不同的回调函数。如果要向同一事件添加多个回调函数,则应使用 addEventListener()
。
这会创建两个"eventObj"吗?如果是这样,我将如何单独访问它们?
将为该事件创建的事件对象只有一个,它将传递给所有回调函数。
有关活动的更多信息,请阅读以下内容:https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
另请查看这个问题的答案,这是类似的
更新:
要回答您的评论:
每次事件发生时,浏览器都会创建一个唯一的事件对象,无论我们是否有一个处理程序侦听该事件?
正确。
我们可以将这个唯一的对象传递给我们的处理程序
再次更正。
我注意到在您的其他帖子中,他们使用"e"代替"eventObj"
您可以在函数中随意命名它。只要你输入一些东西作为你的函数参数(例如function(e) {}
),你的函数就会接受事件对象。
人们通常将该参数命名为e
,event
或event
的缩写,以表明这个参数是什么样的东西,但你可以随心所欲地命名它,就像任何其他函数的任何其他参数一样。
- 代码只能在jsfiddle中工作
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 谷歌地图Api和JS代码不工作
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 为什么这个代码不能正常工作
- Don't工作警报代码jQuery
- addEventListener的Javascript代码不工作!?(单击时打开放大的img)
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 这个jquery代码是如何工作的
- 代码在angular中未按预期工作
- JavaScript代码未按预期工作
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 谷歌地图自动完成,即使使用工作代码也无法工作
- 需要 RepeatBox 及其行单击事件的工作代码才能在 smartface.io 中跳转到相应的页面上
- 任何人都可以指出我的工作代码或完整的概念图,用于 Angular2 中的 ViewMetadata
- 为什么我可以'不要对这个工作代码进行jsFiddle处理
- 工作代码带来错误addEventListener不是一个函数
- 需要修改此工作代码以在新窗口/选项卡中打开
- jQuery:如何计算和显示列的总和(部分工作代码)
- D3js缩放/拖动在我的代码中不再工作(+代码示例)