2011-12-11 4 views
0

私はHTML5ファイルのアップロードをビルドしています。ユーザーがウィンドウの上にファイルをドラッグしたときにドラッグセンターを起動させたいと思います。アイデアは、dragenterがライトボックススタイルのオーバーレイをトリガーして、ドロップゾーンを表示するというものです。ローカルコード/アイテムのドラッグがdragenterを引き起こさないようにする

ここは私のコードです。 (jQueryの)

$(window).bind('dragenter', function (e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    $('#uploadWrapper').show(); 
}).bind('dragexit', function (e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    $('#uploadWrapper').hide(); 
}); 

これが正常に動作しますが、ユーザーが画像や一部のテキストをつかみ、それをドラッグした場合、それはまた、DragEnterイベントをtrigers。何がドラッグされているのかわかる方法はありますか?実際のファイルだけがオーバーレイを表示するトリガーをアップロードするだけですか?

ありがとう...

答えて

3

私は次のようなものがうまくいくと思います。 (私は考えていませんが、それはオペラフレンドリーです。)

function DraggedFiles(e) 
{ 
    for (n in e.dataTransfer.types) 
    { 
     if (e.dataTransfer.types[n] === "Files") return true; 
    } 

    return false; 
} 

次に、あなたのdragEnterイベントのために、単に追加します。あなたがチェックを行い、アクション/不作為をしたい

if (DraggedFiles(e)) 
{ 
    // files were dragged onto here 
} else { 
    // something other than files were dragged 
} 

+0

悲しいことに、e.dataTransferがdragenterイベントで定義されていないようです。 'jQueryの(ウィンドウ).bind( 'のdragEnter'、機能(E){ \tにconsole.log(e.dataTransfer);} )' – Alex

+0

ああ、それはjQueryの問題を引き起こしている...あなたはする必要がありますイベントオブジェクトまたはイベントオブジェクトによってアクセスしてください。 [その他のプロパティ]セクションまでスクロールします。 – ceprovence

+0

YA!それだった!私はそれを見つけたはずだったので、今、愚かな気分に! 'for(n in ...')のコードの小さな誤植も 'for(i in ...')だったはずです。 – Alex

関連する問題