iOS 10 Safari问题在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>元素弹出选择.

是否有一些黑客来解决这个问题?

解决方法

我能够重现这个问题.问题是,每当您尝试删除其更改事件上的选择框时,iOS10都无法正确解除对选择框的绑定.要解决此问题,您需要将代码更改事件代码放在具有一些超时值的setTimeout中.它没有使用零超时值.

http://jsfiddle.net/n62e07ef/

以下是您的代码的修复:

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

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...