Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 重新选择并上载同一文件_Javascript_Html_File Upload - Fatal编程技术网

Javascript 重新选择并上载同一文件

Javascript 重新选择并上载同一文件,javascript,html,file-upload,Javascript,Html,File Upload,您不能重新选择和上载同一文件,Firefox除外,Firefox错误地允许您这样做: <input type="file" id="fileChooser"> document.getElementById('fileChooser').onchange = function () { alert('Uploaded!'); }; document.getElementById('fileChooser')。onchange=function(){ 警报('上传!');

您不能重新选择和上载同一文件,Firefox除外,Firefox错误地允许您这样做:

<input type="file" id="fileChooser">
document.getElementById('fileChooser').onchange = function () {
    alert('Uploaded!');
};

document.getElementById('fileChooser')。onchange=function(){
警报('上传!');
};
以下是我解决问题的方法。我想知道是否有更简洁的方法来实现它

<input type="file" id="fileChooser">
var fileChooser = document.getElementById('fileChooser');
fileChooser.onclick = function () {
    this.value = '';
};
fileChooser.onchange = function () {
    if (this.value) {
        alert('Uploaded!');
    }
};

var fileChooser=document.getElementById('fileChooser');
fileChooser.onclick=函数(){
这个值=“”;
};
fileChooser.onchange=函数(){
if(该值){
警报('上传!');
}
};
在JSFIDLE上:

说明:


您不能连续两次重新选择同一个文件,例如,您在桌面上选择并上载
foo.txt
,然后再次单击文件选择器,文件选择对话框出现,您尝试再次选择同一个文件--浏览器不做任何操作,不显示任何警告框。

您的解决方案有一个问题,在第二次单击文件时选择该文件后,它将清除文件输入。现在,若用户并没有选择一个新文件并取消浏览弹出窗口,那个么他的旧选择就消失了

这不是FF中文件输入的默认行为

我想如果您有一些句柄或回调用于上载,那么您应该清除其中的文件输入。

您必须在“单击事件”之后初始化“更改事件”:

谢谢你的主意! 如果有人使用GWT,那么您可以使用以下代码)


介意解释一下你想更好地解决的问题吗?我不知道你想达到什么目的,你确定吗?我在Chrome和IE上也有一个变化事件。AFAIK文件输入“
.onchange
在任何浏览器上都能正常工作。我需要解释更多:你不能重新选择/重新加载同一个文件,也就是说,如果你选择了一个文件,你就不能再选择它了——它根本不起任何作用。在我看来,“上载同一个文件”意味着你要提交/发送同一个文件两次。在您的情况下,您是在提交之前选择的。这个问题毫无疑问。“这不是FF中文件输入的默认行为。”但这是Chrome&Opera中的默认行为。“我想如果你有一些句柄或回调用于上传,那么你应该清除其中的文件输入。”我想知道我该怎么做。您介意提供一个示例/片段吗?@Sanjeev OP想知道是否有更整洁的问题需要解决。你在他的方法中提到了问题,但没有提到解决方案。请使用评论,因为我不认为是一个answer@Hermes:您没有提到您是如何提交或上传文件的,它是一个多部分表单提交(enctype=“multipart/form data”)?@blunderboy:我同意我不应该将此作为答案,我的不好。假设是这样一个简单的文件读取过程:。stackoverflow的礼仪是只解释代码答案。我的英语不好。对不起:(
 var fileChooser = document.getElementById('fileChooser');
    fileChooser.onclick = function () {
        this.value = '';
        fileChooser.onchange = function () {
            if (this.value) {
                alert('Uploaded!');
            }
        };
    };
     ...//some code :)
     Event.setEventListener(btn, new EventListener() {    
           @Override
           public void onBrowserEvent(Event event) {
           //work with IE11+ and other modern browsers
           nativeClearFile(fileUpload.getElement());
           //throw event click 
           InputElement.as(fileUpload.getElement()).click();
           }
          });
    Event.sinkEvents(btn, Event.ONCLICK);
    ...//continue code :)

    private native void nativeClearFile(Element element) /*-{
        element.value = '';
    }-*/;