HTML5 DragDrop dataTransfer.types не устанавливается после event.dataTransfer.setData(mimeType, angular.toJson(item)) в Chrome

Я использую druska/native_js_drag_and_drop_helper.js для автоматизации угловых перетаскивания списков

Проблема: даже после event.dataTransfer.setData(mimeType,angular.toJson(item))

dataTransfer.types не задан или, вероятно, не разрешен для чтения в событии dragstart и drop

Наблюдение: во время ручного перетаскивания событие Dragstart

dataTransfer {dropEffect: "none", effectAllowed: "move", items: DataTransferItemList, types: Array(1), files: FileList}
    dropEffect:"move"
    effectAllowed:"move"
    files:FileList
    items:DataTransferItemList
    types:Array(0)
    __proto__:DataTransfer

DataTransferItemList {0: DataTransferItem, length: 1}
    length: 0
    __proto__: DataTransferItemList

 DataTransferItem {kind: "string", type: "application/x-dnd"}
    kind: ""type: ""
    __proto__: DataTransferItem

Наблюдение: при использовании пользовательских событий

dataTransfer:Object
    data:Object
        application/x-dnd:"[{"id":"706","title":"Ab 2","drag":false,"selected":true}]"
        __proto__:Object
    dropEffect:"move"
    effectAllowed:"move"
    getData:function (type)
    setData:function (type,val)
    files:Object
    items:Object
    types:Array(0)

я использую

var event = new CustomEvent("CustomEvent", {"cancelable": true})
        event.initCustomEvent(type, true, true, null);
        event.dataTransfer = {
            data: {
            },
            setData: function(type,val) {
                this.data[type] = val
            },
            getData: function(type) {
                return this.data[type]
            },
            dropEffect: 'move',
            effectAllowed:'move',
            types: [],
            items:{},
            files:{}


        }

Я не могу инициализировать объект dataTransfer. dataTransfer.items и dataTransfer.types - свойство только для чтения, я не знаю, как правильно их инициализировать. MDN dataTransfer

1 ответ

Решение

Проблема была в том, что setData dint имел код для установки DataTransfer.types, который использовался angular-drag-and-drop-списками во время перетаскивания.

        setData: function(type,val) {
            this.data[type] = val
            this.types[0] = type
        }

Вышеуказанные изменения исправили проблему.Drag drop теперь работает нормально, используя родной js

Другие вопросы по тегам