0

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

4

2 回答 2

2

你已经成功了一半......只有当客户端运行一个被称为 IE 的浏览器的悲惨借口时才会被定义evt

IE 不会将事件对象传递给处理程序,但只有 1 个全局事件对象。这就是为什么您的事件处理程序会检查事件对象是否已作为参数传递,如果没有,它会获取全局事件对象。不过,这可以写得更短:

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;

( targetor srcElement) 返回对 DOM 元素(触发事件的元素)的引用,而不是 url,就像您的 varname 会让您相信的那样。
双管道||被称为默认运算符。

于 2012-09-10T08:22:15.200 回答
0

该代码迎合了不同浏览器之间的不一致性。详细看这篇文章:http ://www.quirksmode.org/js/introevents.html

于 2012-09-10T08:19:00.527 回答