javascript - virtual <input type ="file"> 元素 - 不可靠的 onchange 事件 - 为什么?

标签 javascript html

我的系统是 Windows 10,Chrome stable 59。在移动 Chrome (Android) 中也发现了问题。

我有一个 html/js 项目 - https://github.com/f3flight/html-storyboard 在此托管 - http://us.3ft.ru/draw/

我当前的问题是,有时(在移动设备上 - Android 手机和平板电脑上更是如此)“LOAD A”和“LOAD”按钮会创建输入元素,然后以编程方式“单击”它 https://github.com/f3flight/html-storyboard/blob/master/js.js#L285 , https://github.com/f3flight/html-storyboard/blob/master/js.js#L346 ,有时在浏览器中选择文件并且选择窗口/应用程序关闭后(在 Android 上我使用“文档”应用程序和“相机”应用程序进行测试),“onchange”事件不会触发。现在页面上有一个 DBG 按钮,可在底部打开一个控制台,可以将问题作为单个“load_all”或“load”行进行监控,而无需进一步的调试输出(应该有很多)。我觉得这个问题在 Android 上比在桌面上更常见,但我在桌面上也看到了它。

在文件选择完成之前,虚拟“输入”元素是否会被垃圾收集(我不会将其添加到 DOM,因为我不想稍后手动清理)?我认为这不太可能,但我不知道浏览器的内部结构。

最佳答案

好吧,这个是我自己想出来的。我的假设是正确的 - 在调用 onchange 事件之前,“input”元素已从内存中删除 - 也就是说,如果我从未在创建它并调用 onclick 的函数之外存储对它的任何引用。

我通过创建一个模块范围的变量修复了这个问题:https://github.com/f3flight/html-storyboard/blob/master/board.js#L14 我在创建输入元素时分配给它,而不是分配新变量。这足以解决问题。

关于javascript - virtual <input type ="file"> 元素 - 不可靠的 onchange 事件 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45093391/

相关文章:

javascript - 在 react 组件中开 Jest 模拟异步调用

javascript - JS 在 Firefox 中工作,但在 Chrome 和 IE 中无法加载

android - android问题中的HTML5 Canvas

css - div 中的 img 向左浮动,文本垂直和水平居中

javascript - 物体上的声音效果 p5.js

javascript - JavaScript 中的正则表达式替换子字符串

php - 将 PHP 字符串传递给 javascript 函数时出现问题

asp.net - iFrame 中的 SSL 登录

html - 如何使 Bootstrap 列在一行中具有相同的高度?

html - 如何向信息框添加滚动条?