为什么这个事件处理程序使用"e = e || event"?

Jor*_*ksa 11 javascript cross-browser event-handling dom-events

有人可以解释一下这行代码意味着什么:

function(e) { e = e || event; e.returnValue = false; return false; }
Run Code Online (Sandbox Code Playgroud)

为什么参数名为e
如果我把它改成'myparam'它会起作用吗?
什么e = e意思?

声明的变量event(后||)在哪里?什么是e.returnValue?

Nie*_*sol 17

这是所有基本的事件管理,虽然它缺失e.preventDefault()...

要分解它,当触发事件处理程序时:

  • 有些浏览器将参数传递给回调保持事件数据(这是符合标准的方式)
  • 其他浏览器(主要是旧的IE)反而将事件数据放入window.event(这里只使用event,这是有风险的,因为它依赖于没有具有该名称的局部变量)

接下来,e = e || event;是一种标准的说法"如果参数未通过,则将其默认为||" 之后的任何内容.在这种情况下,如果未传递event参数,则它会查找全局变量.

e.returnValue是阻止事件导致其默认操作的三种方法之一.另外两个e.preventDefault && e.preventDefault()(你发布的代码中明显没有),和return false;


Ste*_*eve 5

此行只是为了使 IE8 及以下版本的功能与所有其他浏览器相同。所有其他浏览器都将目标元素 ( e) 传递给事件函数。

那么这段代码的作用是:

如果e存在,保留e。如果它不存在,则您使用的是旧版本的 IE,我们将windows.event对象分配给e. 现在所有浏览器的行为方式都相同。