Javascript 检查事件处理程序参数
我在学习Javascript时得到了以下代码:Javascript 检查事件处理程序参数,javascript,javascript-events,Javascript,Javascript Events,我在学习Javascript时得到了以下代码: myLink.onmouseover = showLinkAttr; function showLinkContent(evt) { if (evt) { var url = evt.target; } else { evt = window.event; var url = evt.srcElement; } .............. 我不知道为什么我们需要在创
myLink.onmouseover = showLinkAttr;
function showLinkContent(evt) {
if (evt) {
var url = evt.target;
}
else {
evt = window.event;
var url = evt.srcElement;
}
..............
我不知道为什么我们需要在创建事件处理程序参数“evt”之前检查它。我的想法是,这段代码是多余的,因为“evt”不存在(这段代码在脚本文件的开头),表明我们应该在不检查它的情况下创建它,如下所示:
myLink.onmouseover = showLinkAttr;
function showLinkContent(evt) {
evt = window.event;
var url = evt.srcElement;
然而,由于我是JavaScript新手,下面的代码是由专家编写的。那么,你能告诉我为什么她用它而不是我在下面写的那个吗?
谢谢。该代码针对不同浏览器之间的不一致性。查看本文了解详细信息:您已经完成了一半<代码>evt只有在客户端运行称为IE的浏览器时才是未定义的 IE不将事件对象传递给处理程序,但只有一个全局事件对象。这就是事件处理程序检查事件对象是否已作为参数传递的原因,如果未作为参数传递,则获取全局事件对象。但这可以写得更短:
evt = evt || window.event;//evt is equal to itself, if it's not undefined, else it's a reference to the global object
目标也是如此(您称之为var-url
,这很混乱,可能是错误的):
target
(或srcelelement
)返回对DOM元素(触发事件的元素)的引用,而不是url,就像您的varname让您相信的那样。双管道
|
称为默认操作符 要接受其他一些问题的答案,您需要单击答案评分下方的勾选框。
var target = evt.target || evt.srcElement;