我正在努力了解委托如何运作,我找到了一个很好的解释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。虽然我在这,他们有没有理由省略分号?它们有时不是必需的,还是对它们来说更容易?
答案 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
在作业声明中的用途。