【发布时间】:2017-06-06 23:09:03
【问题描述】:
我正在尝试通过普通的<button> 模拟input[type=file],在大多数情况下它运行良好,但有时change 事件不会被触发。
var count = 0;
button.addEventListener('click', function (e) {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.onchange = function (e) {
const file = e.target.files && e.target.files[0];
if (file) {
$('span').text(`file size: ${file.size}, action count: ${++ count}`);
}
};
document.body.appendChild(input);
input.click();
document.body.removeChild(input);
}, false)
以下是重现问题的步骤:
- 点击按钮,然后选择一个文件。
- 查看动作计数是否增加。
- 重复上述步骤
通常情况下,每次选择文件后,动作计数都会增加 1,即使与之前的文件相同(因此这不是 value-not-changed 类型的问题)。 p>
但是,有时在选择文件后,什么也没有发生。实际上,这种情况经常发生,但不规则。例如,我只是将上述步骤重复了 7 次,并得到了一个事件丢失。有时我必须重复几十次才输。对于经常选择文件的用户来说,这是一个明显的问题。
这似乎只发生在 Chrome 上,在 Chrome 48-51 上重现,我想知道是否有人碰巧遇到同样的问题并得到解决方案?谢谢。
【问题讨论】:
-
“有时更改事件不会被触发” 无法在 chromium 51 处重现