event.dataTransfer.files在firefox中未定义

时间:2012-01-09 19:40:57

标签: javascript html5

我正在向我的项目添加拖放功能,我遇到了firefox的问题。

我正在测试这种情况的代码是:

document.getElementById("folder_files").addEventListener("drop", function(event) {
   event.preventDefault();
   event.stopPropagation();
   alert(event.dataTransfer.files[0].fileName);
}, false);

要测试,我正在将文件拖到我的folder_files div中。在chrome(版本16)中,警报弹出,文件名很好。使用firefox(版本8),我得到了未定义。关于这里发生了什么的任何想法?

2 个答案:

答案 0 :(得分:1)

发现问题。在转储对象中的所有内容之后,我可以看到chrome获得的数据与firefox不同。

Chrome获得了什么:

'0' ...
        'size' => "30379"
        'lastModifiedDate' ...
        'fileSize' => "30379"
        'name' => "bg.png"
        'type' => "image/png"
        'webkitRelativePath' => ""
        'fileName' => "bg.png"
        'webkitSlice' => "function webkitSlice() { [native code] }"
    'length' => "1"
    'item' => "function item() { [native code] }"

firefox得到了什么:

0' ...
        'size' => "30379"
        'type' => "image/png"
        'mozSlice' => "function mozSlice() {
    [native code]
}"
        'name' => "bg.png"
        'mozFullPath' => ""
    'length' => "1"
    'item' => "function item() {
    [native code]
}"

我没有在代码中使用fileName / fileSize / fileType,而是开始使用名称/大小/类型。

答案 1 :(得分:0)

您可以添加如下所示的normalize函数来支持:

// File Normalization for Firefox support:
_normalizeFunction: function (file) {
    if (file.name === undefined && file.size === undefined) {
        file.name = file.fileName;
        file.size = file.fileSize;
    }
},