3

こんにちは、この JavaScript スニペットの意味は何ですか。(evt) の部分はとても紛らわしいです.. evt はブール値ではありません。使い方?

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

    }
4

4 に答える 4

9

evt = (evt) ? evt : window.eventは単なるインラインif構文です。これは、次のコードと同等です。

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

evt本当なら放っておかれevtます。真実でない場合evtは、 に置き換えられwindow.eventます。

于 2012-09-28T07:04:13.120 に答える
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)

次に、コードはevt.which存在するかどうかを尋ね、keyCode の取得元を見つけようとします。 と の場合は、evt.keyCode最新のブラウザーで使用する必要があるものです。keydownkeyup

于 2012-09-28T07:15:32.350 に答える
1

そのような代入式はright から leftに評価されるため、次のことを意味します。

  • evtの値を持っている場合、この値を再度割り当てますevt
  • window.eventそうでない場合は、その内容に関係なくの値を割り当てますevt
于 2012-09-28T07:04:48.287 に答える
1

つまり、evtパラメーターに値がある場合はその値を保持し、値がない場合はwindow.event代わりに使用します。

および?':' 記号は、三項 if 演算子の一部です。

var w = x ? y : z;

したがって、上記では、 が真または偽の値であると見なされるかどうかに応じて、yまたはに割り当てます。zwx

関数が引数checkItを渡さずに呼び出された場合、つまり関数内で変数の値がif 条件内として扱われる場合。evtcheckIt()evtundefinedfalse

于 2012-09-28T07:05:35.773 に答える