2013-06-08 5 views
7

HTML5ファイルリーダーAPIを扱うjavascriptが見つかりました。それは純粋なjavascriptで書かれています。私はそれをjQueryスクリプトに変換しています。しかし、この時点で立ち往生しています。なぜこのプレーンJavaScriptが動作し、同等のjQueryが失敗するのですか?

これは動作します:

document.getElementById('drop-area').addEventListener('drop', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    console.log(e.dataTransfer.files); // outputs the right stuff 
}, false); 

これは失敗します。この問題を解決する

$('#drop-area').on('drop', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    console.log(e.dataTransfer.files); // ERROR: e.dataTransfer is undefined 
}); 

何?

+0

同等のコードをお持ちの場合は、純粋なJSを使用するのはなぜですか? – Markasoftware

+0

@ Markasoftware私のアプリケーションの残りの部分はjQueryを使用しています。むしろ、統一コードベースを持っています。また、このスクリプトの一部には、jQueryとはるかにクリーンな/苦痛のないカスタムDOM操作が含まれています。 – TK123

+0

@ TK123一様なコードベースが必要な場合は、単純なJavaScriptを使用してください。結局のところ、 '+'演算子でさえJavaScriptであるため、jQueryを使うだけで矛盾しています。 –

答えて

11

jQueryはdataTransferイベントプロパティを正規化していません。このイベントプロパティにアクセスするには、元のイベントを通過する必要があります。

console.log(e.originalEvent.dataTransfer.files); 

dataTransferは、以下でjQueryのイベントオブジェクトに追加されるように、また、それを設定することができます。

jQuery.event.props.push("dataTransfer"); 
関連する問題