事件对象如何在此代码中工作
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
,如果是这样,我将如何单独访问它们?
When is the "eventObj" created in this code?
当您感兴趣的事件发生时,在本例中为 click
,您的回调函数将由环境自动执行。当执行回调函数时,它会被赋予一个 event object
作为参数,您可以在函数签名中选择忽略它。 (即你的 showAnswer
函数可能像这样 function showAnswer() {...}
)。 event object
是一个常规对象,包含有关刚刚发生的事件的信息。
Is the scope of "eventObj" local?
是的,是的。
If I assigned the onclick event to two different variables
您不能使用 .onclick
添加两个不同的回调函数。如果你想为同一个事件添加多个回调函数,你应该使用 addEventListener()
。
would that create two "eventObj" and if so how would I access them individually?
将为该事件创建的事件对象只有 一个,并将传递给所有回调函数。
有关事件的更多信息,请阅读:https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
另请查看 问题的答案,该问题与
相似
更新:
回复您的评论:
the browser creates a unique Event Object every time an event occurs whether we have a handler listening for that event or not?
正确。
We can pass this unique object to our handler
再次更正。
I noticed on your other post they used "e" in place of "eventObj"
您可以在函数中任意命名。只要你把一些东西作为你的函数参数(例如 function(e) {}
),你的函数就会接受事件对象。
人们通常把那个参数命名为e
,简称event
,或者event
,来表示这个参数是个什么样的东西,但是你可以随意命名,与任何其他函数的任何其他参数一样。
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
,如果是这样,我将如何单独访问它们?
When is the "eventObj" created in this code?
当您感兴趣的事件发生时,在本例中为 click
,您的回调函数将由环境自动执行。当执行回调函数时,它会被赋予一个 event object
作为参数,您可以在函数签名中选择忽略它。 (即你的 showAnswer
函数可能像这样 function showAnswer() {...}
)。 event object
是一个常规对象,包含有关刚刚发生的事件的信息。
Is the scope of "eventObj" local?
是的,是的。
If I assigned the onclick event to two different variables
您不能使用 .onclick
添加两个不同的回调函数。如果你想为同一个事件添加多个回调函数,你应该使用 addEventListener()
。
would that create two "eventObj" and if so how would I access them individually?
将为该事件创建的事件对象只有 一个,并将传递给所有回调函数。
有关事件的更多信息,请阅读:https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
另请查看
更新:
回复您的评论:
the browser creates a unique Event Object every time an event occurs whether we have a handler listening for that event or not?
正确。
We can pass this unique object to our handler
再次更正。
I noticed on your other post they used "e" in place of "eventObj"
您可以在函数中任意命名。只要你把一些东西作为你的函数参数(例如 function(e) {}
),你的函数就会接受事件对象。
人们通常把那个参数命名为e
,简称event
,或者event
,来表示这个参数是个什么样的东西,但是你可以随意命名,与任何其他函数的任何其他参数一样。