0

Javascriptを学習するときにこのコードを取得しました:

myLink.onmouseover = showLinkAttr;
function showLinkContent(evt) {
    if (evt) {
        var url = evt.target;
    }
    else {
        evt = window.event;
        var url = evt.srcElement;
    }
..............

イベント ハンドラー パラメーター「evt」を作成する前に確認する必要がある理由がわかりません。ここでの私の考えでは、「evt」が存在しないため (このコードはスクリプト ファイルの先頭にあります)、このコードは冗長であり、次のようにチェックせずに作成する必要があることを示しています。

  myLink.onmouseover = showLinkAttr;
  function showLinkContent(evt) {
        evt = window.event;
        var url = evt.srcElement;

ただし、私は JavaScript を初めて使用するため、以下のコードは専門家によって書かれています。それでは、私が下に書いたものではなく、なぜ彼女がそれを使っているのか教えていただけますか? ありがとうございました。

4

2 に答える 2

2

あなたはそこまでの道のりです...クライアントがIEとして知られているブラウザの悲惨な言い訳を実行している場合にのみ、未定義になりevtます

IE はイベント オブジェクトをハンドラーに渡しませんが、グローバル イベント オブジェクトは 1 つしかありません。そのため、イベント ハンドラは、イベント オブジェクトが引数として渡されているかどうかを確認し、渡されていない場合は、グローバル イベント オブジェクトを取得します。ただし、これはもっと短く書くことができます。

evt = evt || window.event;//evt is equal to itself, if it's not undefined, else it's a reference to the global object

ターゲットについても同様です (あなたはそれを と呼んでいましたvar urlが、これは紛らわしく、おそらく間違っています):

var target = evt.target || evt.srcElement;

(targetまたはsrcElement) は、varname が信じさせるような URL ではなく、DOM 要素 (イベントが発生した要素) への参照を返します。
二重パイプ||は、既定の演算子として知られています。

于 2012-09-10T08:22:15.200 に答える
0

コードは、異なるブラウザー間の不一致に対応しています。詳細については、この記事を参照してください: http://www.quirksmode.org/js/introevents.html

于 2012-09-10T08:19:00.527 に答える