javascript文件输入onchange无法正常工作[仅限ios safari]

res*_*sle 6 javascript safari onchange ios

除了在safri移动设备上,下面的代码无处不在.显然,onchange永远不会被触发.

 // create a hidden file input element
 var input  = document.createElement("input");
 input.type = "file";

 // when the input content changes, do something
 input.onchange =
 function(event)
 {
  // upload files
 }

 // Trigger file browser
 input.click();
Run Code Online (Sandbox Code Playgroud)

我找到了类似的例子,但它们都指的是甚至有一些形式的文件输入的其他可见表示形式的场景,它们都涉及表单清除变通办法.那不行.

单击图片时会调用此代码,以便上传新代码作为替换.

任何提示?我做错了什么?

res*_*sle 14

我会被诅咒:在iOS Safari中,与其他浏览器相比,还需要两个额外的条件:

1)输入必须实际附加到DOM.

2)设置.onchange不起作用:必须使用addEventListener.

  • 谢啦!花半天时间与这个战斗。奇怪的是,这不是纯粹的iOS问题。例如,iPad上的iOS 11可以工作,但iPhone上的iOS(带有iOS 11的6+和带有iOS 10的7)没有。 (2认同)
  • 在我的例子中,使用 addEventListener 是不必要的,但是将输入添加到 dom 就可以了: document.body.appendChild(input); input.onchange = () => { // 处理更改事件 document.body.removeChild(input) } (2认同)
  • @UladKasach 令人心碎的尝试和错误:) (2认同)
  • 发现确实需要使用addEventListener。单独将其添加到身体中是不够的。无论出于何种原因,iOS Safari 不会为直接使用相机拍摄的照片(即使用“拍照”选项)触发“.onchange”。奇怪的是,它确实会为从“照片库”拍摄的照片触发“.onchange”,这让我有一段时间没有意识到“拍照”选项失败了。 (2认同)