我有一些像绘图应用程序。用户可以保存项目,然后加载它们。当我第一次加载一个文件(如project1.leds)在应用程序中做一些更改,但没有保存它,然后再次加载相同的文件(project1.leds)没有发生任何事情。我不能加载同一个文件超过一次。如果我加载另一个文件,它的工作。
编码:
$("#menu-open-file").change(function(e){
var data=[];
var file = null;
file = e.target.files[0];
console.log(file)
var reader = new FileReader();
reader.onload = function(e){
data=JSON.parse(reader.result);
x=data[0].SIZE[0];
y=data[0].SIZE[1];
if(x==15) x=16;
if(x==30) x=32;
if(x==60) x=64;
if(y==15) y=16;
if(y==30) y=32;
if(y==60) y=64;
createLeds(x,y,data,false,false);
clearActiveTools();
var svg = $('#contener').find('svg')[0];
svg.setAttribute('viewBox','0 0 ' + x*20 + ' ' + y*20);
$("#contener").css("width",x*20).css("height",y*20);
$("#contener").resizable({
aspectRatio: x/y,
minHeight: 200,
minWidth: 200,
});
wiFirst = $("#contener").width();
hiFirst = $("#contener").height();
}
reader.readAsText(file);
});
我可以删除/移除缓存的文件吗?它甚至缓存在浏览器中吗?
5条答案
按热度按时间xnifntxz1#
这是因为你调用了函数onchange。如果你上传了同一个文件,文件输入的值与上一次上传的值没有变化,因此不会被触发。这也解释了为什么如果你上传了一个不同的文件,它会起作用。不需要清除缓存,你可以通过在读取文件后重置输入字段的值来解决这个问题。
7d7tgy0s2#
因为input正在缓存相同的文件值,所以当你再次加载相同的文件时,它使用该高速缓存来读取value属性。所有你需要做的是当你使用input元素时设置一个条件语句,并将input的value属性设置为空字符串,它应该工作
如果您使用的是事件处理程序,则
nmpmafwu3#
尝试下面的代码,它应该工作。同时点击上传按钮清除现有的值。
rjzwgtxy4#
上述答案唯一的问题是,你的HTML在上传后不再显示文件名,而是继续说“没有选择文件”,这可能会让用户感到困惑。
要解决这个问题,您可以隐藏输入,并将其替换为复制输入显示的标签,如下所示:
于飞:
CSS:
JavaScript语言:
很好地解释了文章如何做到这一点:https://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way/
px9o7tmv5#
在Mozilla中,一切都很好。但在Chrome中,我面临着同样的问题:
reader.onload
未在change event
上第二次上载相同的文件。我使用的是纯
javascript
,下面是我的解决方案!于飞:
Javascript语言: