我在为JavaScript编写iPad代码时发现了一个问题。我还没有在其他HTML5触摸浏览器上测试过这一点,所以我不知道这是iPad /还是其他更普遍的错误。
问题是,如果一个对象附加了ontouchstart事件侦听器,它最初运行良好,但是在我从它的父容器中删除它并再次添加它之后,它就停止工作了。
下面是一个最小的工作示例:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<title>Test</title>
<script type="text/javascript">
window.onload = function(e) {
document.getElementById("btn").onclick = clickBtn;
document.getElementById("touch").ontouchstart = touchDiv;
}
function clickBtn(e) {
var cnt = document.getElementById("container");
var tdv = document.getElementById("touch");
cnt.removeChild(tdv);
cnt.appendChild(tdv);
}
function touchDiv(e) {
var sp = document.getElementById("sp");
sp.innerHTML += "*";
}
</script>
</head>
<body>
<div id=container>
<div style="width: 200px; height: 200px; background-color: red;" id="touch">Touch this</div>
</div>
<button id="btn">Test</button>
<span id=sp></span>
</body>
</html>(为了方便起见,我还把它放在这里:http://dl.dropbox.com/u/8100013/test.html。)如果您触摸iPad上的红色方块,就会在按钮旁边的文本中添加一个"*“,以显示已经触发的touchstart事件。按下按钮可以从其父容器中移除红色方格,并再次添加它。在那之后,至少在我的iPad上,"*“字符不再被添加,所以它似乎不会触发。
有人知道这是怎么回事吗?我承认我对Javascript/HTML5 5很陌生,所以我可能遗漏了一些显而易见的东西,但在带有鼠标的PC上,鼠标向下的事件在删除和重新插入对象之后工作得很好。
发布于 2012-06-03 21:24:06
删除dom元素的父元素也会删除附加的事件,所有这些事件。但我认为,如果不是.removeChild,你是document.body.appendChild,它就不会发生了。
https://stackoverflow.com/questions/10873850
复制相似问题