我在iPhone 6 / iOS 10.0.2和iOS模拟器中遇到了一个相当奇怪的错误:在< select>之后元素已经使用javascript从DOM中删除,它仍会在稍后的事件后弹出(不太确定触发它的是什么)。这是一个非常简单的例子:
< HTML>
< HEAD>
< script type =“text / javascript”>
function removeSelect(){
var parent = this.parentNode;
if(parent!= null){
parent.removeChild(本);
的document.getElementById( “DIV”)的appendChild(document.createTextNode(parent.tagName));
}
其他{
document.getElementById(“div”)。appendChild(document.createTextNode(“null parent”));
}
}
window.onload = function(){
document.getElementById(“sel”)。addEventListener(“input”,removeSelect);
}
< /脚本>
< /头>
<身体GT;
< div id =“div”>
< select id =“sel”>
<选项>首先< /选项>
<选项>第二个< /选项>
<选项>第三< /选项>
< /选择>
<按钮> ABC< /按钮>
< / DIV>
< /体>
< / HTML>
我正在使用在我的iMac上运行的Apache2服务器进行测试,通过WiFi从我的iPhone访问页面,所以基本上是http://imac.local/test/test.html。我不认为服务器有任何影响。
如您所见,此页面没有太大作用,只需删除< select>当值改变时从DOM。这在任何浏览器中都“正常”,即< select>选中一个值后,按钮会在按钮后面附加消息。在iPhone上的Safari中,选择一个值会删除< select>元素并添加DIV,但之后点击按钮时< select>菜单将再次显示所有原始选项,并且在选择值后,在DIV之后附加文本空父项。这实际上永远持续下去,即< select>单击按钮时始终触发。在iOS模拟器中也是如此。
请注意,在实际更改< select>中的值之前单击ABC按钮。 (如预期的那样)绝对没有效果。另请注意,如果将javascript代码修改为不删除< select>,则单击该按钮时不会弹出菜单。
有人可以确认这实际上是按照我遇到的方式发生的,有没有人知道为什么会这样?难道我做错了什么?如果不是,有人知道如何防止这种情况发生吗?
非常感谢!