除了Safari之外,代码在每个浏览器中都能正常运行:
由于未知原因,Safari无法将输入类型动态更改为file
。
首先:为什么会这样?
然后,是否有任何workaroud可以在Safari中动态地将输入类型更改为file
?
答案 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中查看。