【问题标题】:Chrome Handling dataTransfer.types as ObjectChrome 将 dataTransfer.types 处理为对象
【发布时间】:2012-11-04 09:02:29
【问题描述】:

我在 Chrome 24.0.1312.5 中遇到了一个非常奇怪的 dataTransfer 问题,我希望我能得到一些想法。基本上,我有一个nodeIterator,它从 iframe 中挑选出一些有用的元素。对于这些元素中的每一个,我都添加了事件侦听器以允许删除内容。我对这段代码有疑问:

currentNode.addEventListener('dragover', function (e) {
    // Only accept images
    // Error occurs in below conditional
    if (e.dataTransfer.types.contains('text/uri-list')) {
        e.preventDefault();
    }
});

这是我添加数据的代码部分:

figure.draggable = 'true';
figure.addEventListener('dragstart', function (e) {
    e.dataTransfer.setData('text/uri-list', img.src);
    e.dataTransfer.setData('text/plain', img.alt);
    e.dataTransfer.setData('application/x-trash.delete', img.id);
});

我在控制台得到的错误是这样的:

Uncaught TypeError: Object text/plain,text/uri-list,application/x-trash.delete
has no method 'contains'

我已经写了一个fiddle 应该能够重现这个问题,但它当然工作得很好。

对我可能遗漏的东西有什么想法吗?或者我应该检查代码的其他相关部分?

【问题讨论】:

    标签: javascript data-transfer


    【解决方案1】:

    Chrome 中返回的 dataTransfer.types 似乎是一个数组。您可以使用 indexOf() 代替 contains 方法来解决。

    【讨论】:

    • 感谢您的回复。我最终以完全不同的方式实现了这个功能,所以我无法检查它是否能解决我的问题,但它确实如此。如果下周左右没有其他回复,我会接受您的回复。
    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 2011-04-04
    • 1970-01-01
    • 2020-07-13
    • 2017-01-04
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多