0

在进行文件拖放时,我正在尝试使用jQueryon()方法将事件附加到浏览器窗口...drop

$(window).on('drop', function(event) {

    var dt = event.dataTransfer;
    var fileList = dt.files;

    // do stuff with the file list...
});

...但我得到一个TypeError

类型错误

每当我尝试附加dropwindowordocument或时,都会发生这种情况document.body。但是,如果我drop使用自定义 JavaScript 函数附加事件,则没有问题...

function attachEvent(element, event, fn) {
    if (element.addEventListener) {
        element.addEventListener(event, fn, false);
    } else if (element.attachEvent) {
        element.attachEvent('on' + event, fn);
    }
};

attachEvent(window, 'drop', function(event) {

    var dt = event.dataTransfer;
    var fileList = dt.files;

    // do stuff with the file list...
});

知道为什么会这样吗?我究竟做错了什么?有没有办法将drop事件附加到jQuery 或window使用jQuery?documentdocument.body

4

1 回答 1

6

错误消息或arguments数组TypeError可以更容易地判断问题发生在哪里,但很可能您的问题并没有真正发生在绑定上,而是在您的回调中。

jQuery 使用规范化的事件对象。该对象没有dataTransfer属性,因此您的var dt = event.dataTransferdt未定义。当你在下一行访问filesundefined 的属性时,你会得到一个.dtTypeError

您可以从 访问具有所有“正常”属性的本机、非规范化事件对象event.originalEvent,因此在使用 jQuery 时,您需要执行以下操作:

$(window).on('drop', function(event) {

    var dt = event.originalEvent.dataTransfer;
    var fileList = dt.files;

    // do stuff with the file list...
});
于 2012-06-08T02:20:28.990 回答