JS - 无法在Safari中将输入类型更改为FILE

时间:2016-07-19 19:16:35

标签: javascript input safari

[JSFIDDLE]

除了Safari之外,代码在每个浏览器中都能正常运行:

enter image description here

由于未知原因,Safari无法将输入类型动态更改为file

首先:为什么会这样?

然后,是否有任何workaroud可以在Safari中动态地将输入类型更改为file

1 个答案:

答案 0 :(得分:5)

我在Safari和旧版本的IE上只看到过这个问题。关于原因,我从未在此事上找到任何记录。

有一次,jQuery本身禁止对type的{​​{1}}属性进行更改,因为它在IE中导致了问题。它被记录为:

input

您可以在this question中找到有关此问题的更多信息。

如今,似乎不再是这种情况,但在将类型更改为// We can't allow the type property to be changed (since it causes problems in IE) if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) throw "type property can't be changed"; 时,Safari仍然无声地失败。另一方面,从file更改它没有任何问题。由于没有记录,我一直认为这是为了“安全”措施,但我从未找到任何具体证据。

我正在使用的解决方法是检测新类型何时为file,在这种特殊情况下,创建一个新的file元素,将其类型设置为file,设置其id并替换现有的输入与新的输入。

input

您可以在this fiddle中查看。