检查事件处理程序参数

Check event handler parameter

本文关键字:参数 程序 事件处理 检查      更新时间:2023-09-26

我在学习JavaScript:时得到了这段代码

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的新手,下面的代码是由一位专家编写的。那么,你能告诉我她为什么用它而不是我下面写的那个吗?

你已经成功了一半。。。当客户端运行IE浏览器的悲惨借口时,evt将仅未定义。

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,这很令人困惑,也许是错误的):

var target = evt.target || evt.srcElement;

target(或srcElement)返回对DOM元素(触发事件的元素)的引用,而不是像varname让您相信的那样返回url
双管||被称为默认操作符。

该代码针对不同浏览器之间的不一致性。有关详细信息,请参阅本文:http://www.quirksmode.org/js/introevents.html