2016-09-18 51 views
7

有了这个链接,您可以重现该错误。iOS 10 Safari问题与<select>元素不再在DOM中

https://jsfiddle.net/pw7e2j3q/

<script> 
$("#test").change(function() { 
    $("#test").remove(); 
    var combo = $("<select></select>").attr("id", "test2").attr("name", "test"); 
    combo.append("<option>New One</option>"); 
    $("#App").append(combo); 
}); 

$("#click").click(function(){ 
    $("#App").remove(); 
}) 
</script> 

如果单击<select>元素和DOM删除它之后,你点击链接测试。您应该看到旧的<select>元素弹出供选择。

是否有一些破解修复?

+1

感谢您分享问题的确切性质。在日期选择器中我也遇到同样的问题。不知道确切的问题是什么,无法找到相同的修复方法。随着我取得一些进展,将会让你更新。 –

+0

我看到了同样的问题,没有任何关于修复的任何地方的注意事项 – John

+0

这可能是由与http://stackoverflow.com/q/39557023/37168 – stone

回答

4

我能够重现此问题。问题在于,无论何时您试图删除其更改事件上的选择框,iOS10都无法正确解除绑定选择框。为了解决这个问题,你需要把你的代码更改事件代码放在一个setTimeout中,并带有一些超时值。它不处理零超时值。

http://jsfiddle.net/n62e07ef/

以下是为您的代码修复:

<script> 
$("#test").change(function() { 
    setTimeout(function() { 
    $("#test").remove(); 
    var combo = $("<select></select>").attr("id", "test2").attr("name", "test"); 
    combo.append("<option>New One</option>"); 
    $("#App").append(combo); 
    }, 50); 
}); 

$("#click").click(function(){ 
    $("#App").remove(); 
}) 
</script> 
+0

相同的iOS错误造成的,这很奇怪吗? – atorgfr

+0

这很奇怪,但解决方案为我工作。 – John

+0

奇怪,但是这个bug可能是由于Apple在iOS10中最近做出的输入类型更改所致。尽管iOS10发布后有两个次要版本,但尚未解决此问题。看起来这个问题是要停留更长的时间。 –

0

一个简单的解决办法是改变一下代码,所以不用重新生成整个选择元素,但只是选项元素里面。

0

我今天偶然发现了这个bug。这就像Gautam在回答中所说的那样,事件在被删除的元素之前不会解除绑定。 我的解决方案,blur the element before removing it

$("#test").blur().remove();