我的网站上有一个上传区域,当在IE9-11中使用时,文件路径包含文件名中的C:\ fakepath \ preface。所以我构建了一个解决方法来删除它,但它只适用于FF和Chrome。在IE中使用时,字段不会更新。我认为这是setInterval
电话的问题,但我不确定。以下是我的代码。这是一个显示问题的小提琴(在IE中用于复制问题):http://jsfiddle.net/daQD6/5/
$(document).ready(function () {
setInterval(running, 1);
function running() {
var filenameIn = $('input[type=file]').val();
var filenameOut = filenameIn.split('\\').pop();
$('#path').text(filenameIn);
$('#result').text(filenameOut);
}
});
有关IE内变通方法或问题原因的任何想法?非常感谢和节日快乐!
答案 0 :(得分:4)
您的jQuery版本(v.1.10.1)中的错误:http://bugs.jquery.com/ticket/13980
使用较新版本 - v 1.10.2及更高版本具有此修复程序。
答案 1 :(得分:2)
Chris Hardie已经回答了你的IE问题,但我想提一些关于文件输入的注意事项。
我已更新您的fiddle(并根据Chris的建议更改了jQuery版本)以使用html5rocks中的代码,在使用表单输入进行选择部分。
<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
您会注意到,如果您使用与文件输入关联的事件,您始终会在evt.target.files[0].name
中获取不带路径的文件名。如果您使用事件流程,则无需setInterval
。