在onclick函数中使用双管道 - 为什么事件会被假?

时间:2014-03-19 22:52:34

标签: javascript delegation

我正在努力了解委托如何运作,我找到了一个很好的解释here

在网站上,它们包含以下代码。我在理解双管道的使用方面遇到了很多麻烦。我对StackOverflow做了一些研究,并了解到双管用于检查第一个值是否为假(即它是or)。 但是,在这种情况下,onclick被触发,因为明显是发生的事件。

那么为什么event会变错?使用双管有什么意义?

table.onclick = function(event) {
  event = event || window.event
  var target = event.target || event.srcElement

  while(target != table) { // ( ** )
    if (target.nodeName == 'TD') { // ( * )
       toggleHighlight(target)
    }
    target = target.parentNode
  }
}

P.S。虽然我在这,他们有没有理由省略分号?它们有时不是必需的,还是对它们来说更容易?

2 个答案:

答案 0 :(得分:1)

事件对象并不总是传递给点击处理程序 - IE有window.event http://javascript.info/tutorial/obtaining-event-object

答案 1 :(得分:0)

对于这样的事情,正常的赋值声明通常有一个或语句(||)可以在多个浏览器中工作,并允许浏览器分配任何一个是真的。以下是一些例子:

var webgl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");

在本声明中,我试图访问Canvas元素的WebGL上下文。现在有些浏览器比其他浏览器更老了,为了支持尽可能多的浏览器,我要求标准的WebGL上下文,或称为“experimental-webgl”的浏览器,可能是旧版本的Chrome,Firefox等。

另一个例子:

requestAnimFrame = return
    window.requestAnimationFrame       ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame;

我正在尝试在这里设置requestAnimationFrame,这是一种非常快速有效的方法,可以做出比setInterval();更好的方法。我再次尝试确保尽可能多地支持浏览器。

来自jQuery的最后一个来源:

jQuery规范了跨浏览器的非标准化属性。 event.which规范化密钥代码检测。

event.which = original.charCode != null ? original.charCode : original.keyCode;

在这里,检查是查看charCode是否返回某些内容,如果没有,则该浏览器不使用该属性,因此JavaScript将尝试访问并将keyCode属性分配给{ {1}}。

希望这可以让您了解event.which在作业声明中的用途。