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, время: 18:09. |