javascript文件输入onchange不起作用[仅限ios safari]

javascript文件输入onchange不起作用[仅限ios safari],javascript,ios,safari,onchange,Javascript,Ios,Safari,Onchange,下面的代码适用于除safri mobile之外的任何地方。 显然,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) { // up

下面的代码适用于除safri mobile之外的任何地方。 显然,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();
我发现了类似的例子,但它们都提到了一些场景,其中甚至有一种形式的文件输入的其他可见表示,它们都涉及到表单清除的变通方法。这在这里行不通

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


有什么提示吗?我做错了什么吗?

我会被诅咒的:与其他浏览器相比,在iOS safari上有两个额外的条件是必要的:

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


2) 设置.onchange无效:必须改用addEventListener。

onchange
在客户端实际选择一个或多个文件之前不会触发
.click()
上的某些浏览器中可能不起作用。对于我能够测试的内容,click在任何地方都起作用,并且文件选择器在safari iOS上正确打开。选择文件并关闭选择对话框后,不会触发onchange。谢谢!花半天时间来战斗。奇怪的是,这不是纯粹的iOS问题。例如,iPad上的iOS 11运行正常,但iPhone上的iOS(6+支持iOS 11,7支持iOS 10)不起作用。你能解释一下为什么或者在哪里找到这些信息吗?我从变更事件中得到的只是一个对象,上面写着{isTrusted:true}。在其他浏览器上,我会得到event.target.files数组。请确保在onchange触发之前不删除输入!在单击事件之后,我正在无声地删除它。在我的例子中,使用addEventListener是不必要的,但是将输入添加到dom完成了任务:document.body.appendChild(输入);input.onchange=()=>{//Handle change event document.body.removeChild(input)}@UladKasach灵魂破碎试验和错误:)