Drug n Drop на форму
Господа, буду признателен если кто нибудь просветит меня на предмет эвентов сабжа и их свойств.
Ситуация такая : есть поле в которое надо бросить файлы с определенными расширениями, а прочите за борт. Здесь все просто, нужные файлы отсортировываются, предупреждение о несоответствии всплывает когда файл бросается. Но задача в том чтобы до того как элемент бросили, он бы вошел на поле для дропа и проверил расширение файла который тащит курсор и соответствено курсор сменился на знак условно "запрещающий дроп" Подскажите,куда копать,может решение есть готовое или мысли какие? |
Цитата:
Хоть бы тестовый пример какой сделал... |
<marquee>Я принимаю только image/jpeg <img src="http://javascript.ru/forum/images/smilies/wink.gif" /></marquee> <script> document.addEventListener('dragover', function(e) { var dataTransfer = e.dataTransfer; var accept = Array.prototype.some.call(dataTransfer.items, function(item){ return item.kind == 'file' && item.type == 'image/jpeg'; }); dataTransfer.dropEffect = accept ? 'copy' : 'none'; e.preventDefault(); }); </script> |
Ну вот человеку вполне хватило!) За что ему огромное спасибо!
|
Цитата:
|
var t = this; t.addEventListener('dragover',function(e){ var data = e.dataTransfer; console.log(data.items); if (data.items.length > 1) { data.dropEffect = 'none'; } else if (data.items.type == 'image/jpeg') { data.dropEffect = 'copy'; } else { data.dropEffect = 'none'; } }) Вот что у меня получилося. Но не работает главное - выборка по расширению, неврубаюсь почему :-E |
Потому что обработчик dragover не имеет доступа ни к содержимому файлов (боже упаси!), ни к их именам.
Если хотите принимать только файлы, делайте еще проверку item.kind == 'file'. И разве свойство items.type определено? Может items[0].type ? |
Цитата:
|
http://dev.w3.org/html5/spec-preview/dnd.html#dndevents
Вот тут в табличке видно что доступ к объектам есть только на ondrop. Во всех остальных случаях - Protected Mode. Оно и понятно: пользователь ведь может только "мимо проносить" файл, поэтому доступ появляется только когда он уже бросил его. |
Цитата:
Поставил бы вам еще плюс, но ограничения форума не позволяют В любом случае я dataTransfer я разобрался. |
Часовой пояс GMT +3, время: 00:08. |