2011-12-11 24 views
0

Im建立一個HTML5文件上傳,我想讓用戶在窗口上拖動文件時觸發dragenter。這個想法是,dragenter會觸發一個lightbox樣式覆蓋,顯示拖放區域。防止拖動本地代碼/項目觸發dragenter

這是我的代碼。 (jQuery的)

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

這工作得很好,但如果用戶抓取的圖像或一些文本並拖動它,它也trigers,DragEnter事件。有沒有一種方法可以告訴正在拖動的內容,只有實際的文件才能上傳觸發器顯示覆蓋圖?

謝謝..

回答

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的導致了問題......你需要通過event.originalEvent.dataTransfer訪問它,我認爲:[Event Object - jQuery API](http://api.jquery.com/category/events/event-object/)。向下滾動到「其他屬性」部分。 – ceprovence

+0

YA!就是這樣!現在感覺很愚蠢,因爲我應該已經發現了!你的代碼中的小錯字應該是'for(in ... in) – Alex

相關問題