2016-04-28 12 views
0

をドロップ:http://www.html5rocks.com/en/tutorials/dnd/basics/なぜif文がe.preventDefault? - ドラッグと私はjavascriptのHTML5ドラッグ&ドロップ(ドラッグ&ドロップ)を作るために、この例を以下てるのjavascript

は、デフォルトのイベントが抑制されるいくつかのブラウザのデフォルトの動作を防ぐために。私はその必要性を理解している。しかし、なぜif文もありますか?

function handleDragOver(e) { 
    if (e.preventDefault) { 
    e.preventDefault(); // Necessary. Allows us to drop. 
    } 

//なぜこの私に声明?, 場合には、二重のようだ: それは(trueの場合)がすでにある場合は、もう一度それを行いますか...?

JavaScriptで初心者にこれを説明する時間がある人に感謝します。

ありがとうございます!

+0

_私には二重に見える_二重ではなく、if(e.preventDefault)がその機能を実行していない、その存在を確認するだけです –

答えて

0

最初の呼び出しは関数を実際に呼び出すのではなく、関数が定義されているかどうかを確認するだけです。コードは基本的に "e.preventDefault()メソッドが定義されていますか?"そうである場合、それを実行する:

// Is preventDefault() currently defined? 
if (e.preventDefault) { 
    // Then do it. 
    e.preventDefault(); 
} 

可能推論

これが存在する可能性の高い理由はsupport for event.preventDefault() wasn't added in Internet Explorer until IE9ので、次のようなコードは、それらの暗い、プレ中より一般的であったかもしれませんIE9日:

// An example of a pre-IE9 check for preventing default events 
(event.preventDefault) ? event.preventDefault() : event.returnValue = false; 
+0

こんにちはリオン、ありがとう。メソッドが定義されているかどうかをチェックしています。したがって、IE9以前の場合、デフォルトの動作を行うでしょうか?それでは、このチェックは何を防ぐのですか? –

+0

'e.preventDefault()'は定義されていないので、if文は決して実行されないので、事態はいつものように続きます。 [Halcyonが彼の回答で述べたように](http://stackoverflow.com/a/36920752/557445)、このシナリオの実際の 'e'は、いくつかの古いバージョンのIEではまったく存在しないかもしれません。 –

+0

私は参照してください。確かに。両方の洞察に感謝します! –

0

通常、このような文はブラウザの互換性と関係がある。たとえば、一部のブラウザではpreventDefault()機能が実装されていない可能性があります。つまり、私はこの問題を抱えているブラウザーを知らない。インターネットエクスプローラの

古いバージョンは、ないパラメータとしてイベントオブジェクトを渡す代わりに、イベントは、グローバルスコープ(すなわちwindow.event)でした。しかし、eが定義されていない場合、if(e.preventDefault)が例外をスローするため、このコードはそれを防ぎません。

別の候補の理由はhandleDragOverがただのEventListener以上から呼び出されていることです。サンプルコードでは、これは当てはまりませんが、おそらく、ある時点でこれが必要でした。私はこれを悪い習慣とみなし、eventlistenerは1つの入力パラメータしか持たず、常にイベントでなければなりません。

私はあなたがif文を削除することができます確信しています。

+0

おかげでハルシオン!あなたは、ifチェックが本当に何も防止していないということを意味しています。 –

関連する問題