iPad用のJavaScriptをコーディングしようとすると問題が発生しました。私はこれを他のHTML5タッチブラウザでテストしていないので、これがiPad / Mobile Safariのバグなのか、それとももっと一般的なものなのかわかりません。
問題は、オブジェクトに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の赤い四角をタッチすると、横のテキストに「*」が追加されます。タッチスタートイベントが発生したことを示すボタン。ボタンを押すと、親コンテナから赤い四角が削除され、再度追加されます。その後、少なくとも私のiPadでは、「*」文字が追加されなくなったため、タッチスタートが起動しないようです。
誰かが何が起こっているのか知っていますか?私はJavascript/HTML5を初めて使用するので、明らかな何かが欠けている可能性があることを認めますが、マウスを搭載したPCの同じ状況では、オブジェクトを削除して再挿入した後、mousedownイベントは正常に機能します。