iOS 10 Safari在DOM中不再使用<select>元素

时间:2016-09-18 11:12:32

标签: safari ios10

使用此链接,您可以重现该错误。 https://jsfiddle.net/pw7e2j3q/ &LT;脚本&GT; $(“#test”)。change(function(){   $( “#测试”),删除()。   var combo = $(“&lt; select&gt;&lt; / select&gt;”)。attr(“id”,“test2”)。attr(“name”,“test”);   combo.append(“&lt; option&gt; New One&lt; / option&gt;”);   $( “#应用程序”)追加(组合)。 }); $( “#点击”)。点击(函数(){   $( “#应用程序”),删除()。 }) &LT; /脚本&GT; 如果您点击&lt; select&gt;元素并从dom中删除它,然后单击链接测试。你应该看到旧的&lt; select&gt;元素弹出选择。 是否有一些黑客来解决这个问题?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

一个简单的解决方案是稍微改变代码,所以不要重新生成整个select元素,而只是重新生成内部的选项元素。

答案 2 :(得分:0)

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

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