evt =(evt)的含义? evt:window.event

时间:2012-09-28 07:01:52

标签: javascript javascript-events

嗨这个javascript片段意味着什么。(evt)部分是如此令人困惑.. evt不是布尔值。它是如何工作的?

function checkIt(evt) {
        evt = (evt) ? evt : window.event
        var charCode = (evt.which) ? evt.which : evt.keyCode

    }

4 个答案:

答案 0 :(得分:8)

evt = (evt) ? evt : window.event只是inline if syntax。它等同于这段代码:

if (evt) {
    evt = evt;
} else {
    evt = window.event;
}

如果evt真实,evt将保持不变。如果evt不真实,则会被window.event替换。

答案 1 :(得分:3)

它适用于事件监听器。

IE6-IE8采用了与W3C标准完全不同的事件方法。

当事件触发时,W3C标准浏览器将在回调中传递事件对象:

function keyPressed (e) { /* do stuff with e */ }

在您的情况下,它是keydown(或使用keyCode的其他内容) IE不支持这一点,而是每次发生事件时都会更新window.event

所以你的函数正在检查一个对象是否被传入它:

evt = (evt) ? evt : window.event;
// does `evt` exist, and is it anything but '', 0, false, null, undefined, NaN
// yes: evt = itself (W3C)
// no: evt = window.event (IE6-8)

然后代码询问{​​{1}}是否存在,以试图找出从哪里获取keyCode。 在evt.whichevt.keyCode的情况下,keydown是您应该用于现代浏览器的内容。

答案 2 :(得分:1)

这样的赋值表达式是从从右到左计算的,所以这意味着:

  • 如果evt truthy 值,请将此值重新分配回evt
  • 如果没有,请将window.event的值分配给evt
  • ,无论其内容如何

答案 3 :(得分:1)

这意味着:如果evt参数有值,则保留该值,如果没有值,则使用window.event代替。

?和':'符号是三元if运算符的一部分:

var w = x ? y : z;

如上所述,您可以将yz分配给w,具体取决于x是否被视为真值或假值。

如果调用了checkIt函数而没有传入evt参数,即checkIt(),则函数内部evt变量的值为undefined在if条件中被视为false