嗨,这个 javascript 片段是什么意思。(evt)部分太令人困惑了。evt 不是布尔值。这个怎么运作?
function checkIt(evt) {
evt = (evt) ? evt : window.event
var charCode = (evt.which) ? evt.which : evt.keyCode
}
嗨,这个 javascript 片段是什么意思。(evt)部分太令人困惑了。evt 不是布尔值。这个怎么运作?
function checkIt(evt) {
evt = (evt) ? evt : window.event
var charCode = (evt.which) ? evt.which : evt.keyCode
}
evt = (evt) ? evt : window.event只是内联if语法。它等效于以下代码:
if (evt) {
evt = evt;
} else {
evt = window.event;
}
如果evt是真的,evt将被单独留下。如果evt不是真的,它将被替换为window.event.
它适用于事件侦听器。
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)
然后代码询问是否evt.which存在,试图找出从哪里获取 keyCode。
在 和 的情况下,evt.keyCode您应该在现代浏览器中使用它。keydownkeyup
像这样的赋值表达式是从右到左求值的,所以这意味着:
evt有一个真实值,则将此值分配回evtwindow.event无论其内容如何,都将值分配给evt这意味着:如果evt参数有值,则保留该值,如果它没有值,则window.event改用。
和?':' 符号是三元 if 运算符的一部分:
var w = x ? y : z;
所以上面你分配y或z分配w取决于是否x被认为是一个真值或假值。
如果在checkIt没有传入evt参数的情况下调用函数,即checkIt()在函数内部,evt变量的值将undefined被视为false在 if 条件内。