2012-01-06 2 views
2

Я разрабатываю интерактивный файл-загрузчик в JavaScript и HTML, в котором мне нужно получить доступ к текущему имени файла перетаскивания файлов (тот, который вызывает событие dragenter).Получение имени файла во время события перетаскивания

Но есть проблема, элемент dataTransfer событий не содержит никаких файлов, и мне нужно знать имя файла перед тем, как событие drop выбрано. Является ли это возможным?

Заранее спасибо.

+0

Какой браузер вы используете? – robertc

+0

Chromium 16.0.912.75. – mkroman

+1

[Это ошибка] (https://bugs.webkit.org/show_bug.cgi?id=44727), о которой вы должны знать, также [этот] (https://bugs.webkit.org/show_bug. cgi? id = 42872) – robertc

ответ

6

Я думаю, вы, возможно, придется объявить локальную переменную для него .... и не забудьте инициализировать его при запуске перетаскивания .... убить его, когда сопротивление конца ... (dragend/падение)

назначьте его в «DragStart» ..... (ПРИМЕЧАНИЕ: в dragstart u можно назначить любое значение dataTransfer с помощью «event.dataTransfer.setData» .... но он недоступен в DragEnter/DragOver)

, потому что «DragEnter» не может получить доступ к dataTransfer.getData() из-за соображений безопасности ... он ТОЛЬКО доступен в действии «onDrop» .....

видеть ссылки ниже: // Получить данные не могут быть использованы здесь (для отводящего кадра) за счет: http://msdn.microsoft.com/en-us/library/ie/ms536436(v=vs.85).aspx

// использовать dataTransfer.getData в DragEnter/DragOver не работает Chorme http://code.google.com/p/chromium/issues/detail?id=50009

//dataTransfer.getData доступен только в DROP для соображений безопасности .... http://code.google.com/p/chromium/issues/detail?id=2141

ИЛИ вы можете проверить по следующей ссылке ... смотрите, если это полезно: http://weblog.bocoup.com/using-datatransfer-with-jquery-events/

MORE: Вы также можете использовать LocalStorage/sessionStorage вызов, который сохранит данные в кэше браузера, LocalStorage может быть использован в Cross Window (но тот же браузер), sessionStorage доступен только одной и той же сессии. Просто сделать что-то вроде: В вашем DragStart ->

localStorage.setItem("DraggedFileName",myFileName); 

В вашем DragEnter ->

var myFileName = undefined; 
if(localStorage.getItem("DraggedFileName")) 
myFileName = localStorage.getItem("DraggedFileName"); 

В вашем DropEvent и DragEnd ->

if(localStorage.getItem("DraggedFileName")) 
    localStorage.removeItem("DraggedFileName"); //Remove after Drop/DragEnd, clear it 

Надеется, что это помогает .. ..

+0

Я потратил много времени, пытаясь понять это. Я пришел к выводу, что спецификация в том, что она стоит, глупее и глупо. Более подробно читайте мое объяснение (напыщенная речь) здесь: http://stackoverflow.com/questions/11927309/html5-dnd-datatransfer-setdata-or-getdata-not-working-in-every-browser-except-fi – Gup3rSuR4c

Смежные вопросы