【发布时间】:2019-08-27 04:22:36
【问题描述】:
我有一个 Javascript 变量的问题,它只出现在 Firefox 中而不出现在 chrome 中。
<input id="test" type="file"/>
<script>
var f = document.getElementById('test').files;
var value = f;
var i = setInterval(() => {
f = document.getElementById('test').files;
if (f == value) {
console.log(true);
console.log(f);
console.log(value);
} else {
console.log(false);
console.log(f);
console.log(value);
value = f;
clearInterval(i);
}
}, 1000);
</script>
此代码在控制台日志中保持为真,并且应该跟踪变量更改。 在 chrome 中,如果我选择一个带有文件输入标签的文件。它将跟踪变量“value”和变量“f”之间的变量差异。这将导致它进入 console.log(false) 并终止 setInterval。但是,在使用文件输入选择文件后,在 firefox 中,两个变量都会立即更新,并且 firefox 将无法跟踪任何差异。导致脚本永远不会结束。
这里有一个小提琴:https://jsfiddle.net/y9jh6a1t/
我希望在 Firefox 中复制 chrome 的行为。
【问题讨论】:
-
var f = document.getElementById('test').files;;在这里取出额外的半成品可能会有所帮助。他们倾向于以不同的方式处理此类有问题的事情。 -
@Jbluehdorn oof 这只是一个错字。但这不是问题的原因。眼尖
-
嗯,我不确定。尽管我会更改您的代码以使用
onChange处理程序作为输入,而不是每秒轮询一次。它会更快地响应并减少开销。 -
@Jbluedhorn 是的,我很想更改为 onchange 函数。但是这段代码只是对框架一部分的重新创建,我想为此找到解决方法。
标签: javascript google-chrome variables firefox