Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览并选择IE中未定义的用户硬盘中的文件_Javascript_Html_Dojo - Fatal编程技术网

Javascript 浏览并选择IE中未定义的用户硬盘中的文件

Javascript 浏览并选择IE中未定义的用户硬盘中的文件,javascript,html,dojo,Javascript,Html,Dojo,当我使用输入按钮在用户计算机上浏览文件时,它在FF、IE9和Chrome上工作。但是当我在IE9中将文件传递给JS函数时,我得到了未定义的文件,而它在FF和Chrome中可以完美地工作 <form id="uploadForm" style='display:none;padding:1px;' method="post" enctype="multipart/form-data"> <input type="file" name="data" id="inFile" si

当我使用输入按钮在用户计算机上浏览文件时,它在FF、IE9和Chrome上工作。但是当我在IE9中将文件传递给JS函数时,我得到了未定义的文件,而它在FF和Chrome中可以完美地工作

 <form id="uploadForm" style='display:none;padding:1px;' method="post" enctype="multipart/form-data">
 <input type="file" name="data" id="inFile" size="15" style="display:none" onchange="handleFiles(this.files)"/>


function handleFiles(files){
//doing something with the files
}



 //In IE files is undefined

函数句柄文件(文件){
//对文件做些什么
}
//在IE中,文件是未定义的
我也尝试过使用

    dojo.connect(dojo.byId("uploadForm").data, "onchange", function(evt){
        handleFiles(this.files);
    });

<form id="uploadForm" method="post" enctype="multipart/form-data">
<input type="file" name="data" id="inFile" size="15" style="display:none"/>
dojo.connect(dojo.byId(“uploadForm”).data,“onchange”,函数(evt){
handleFiles(this.files);
});
此.files再次未定义


感谢

很明显,IE中没有定义文件。有关如何使用IE,请参阅。

IE9不支持多个文件上载,并且没有
文件
属性。您必须依赖
value
属性并从它提供的路径解析文件名

我的解决方案:

  • this
    而不是
    this.files
    传递到
    handleFiles()
    函数:

    <input type="file" onchange="handleFiles(this)">
    

  • 请参阅jsFiddle上的工作示例:

    我已经尝试过这个:但它不起作用!您知道如何在没有jquery的情况下编写它吗?根据链接答案的代码,在IE中,您只需使用输入本身来访问文件,而不是input.files,因此在您的代码中is应该足以执行
    onchange=“handleFiles(this)”
    。但是,我不确定这是否也适用于多个选择。还要注意,您必须进行一些浏览器检测,以使用适用于每个浏览器的正确代码。经过两天的研究并尝试上述所有建议,IE9将不支持文件读取,即使我提取了所有建议的属性,我无法读取该文件。现在,我只会通知用户使用Chrome或FF,当IE10退出时,代码仍然可以工作。谢谢你的帮助。我已经试过了,但既然我不能使用FileReader(),我该如何读取该文件。好吧,你不能,而且必须等待IE10获得。根据需要,您可以使用
    ActiveX的FileSystemObject
    。见MSDN。我使用
    FileReader
    只是在上传时预览图像,因此当客户端显示为IE(以及最新6.0之前的Safari)时,我不会预览图像。
    function handleFiles(input){
        var files = input.files;
        if (!files) {
            // workaround for IE9
            files = [];            
            files.push({
                name: input.value.substring(input.value.lastIndexOf("\\")+1),
                size: 0,  // it's not possible to get file size w/o flash or so
                type: input.value.substring(input.value.lastIndexOf(".")+1)
            });
        }
    
        // do whatever you need to with the `files` variable
        console.log(files);
    }