обработчик touchend стреляет дважды - PullRequest
3 голосов
/ 21 сентября 2011

В веб-приложении на iOS у меня есть несколько кнопок, которые реагируют только на прикосновения (в качестве ярлыка для задержки нажатия в мобильном сафари). Когда я вставляю предупреждение в обработчик, то последующее нажатие любой другой кнопки на странице запускает этот оригинальный обработчик, даже если у них есть свои собственные обработчики. Вот пример кода, который иллюстрирует проблему:

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />

<script type="text/javascript">

function clickAlert(evt) {
    alert('btn clicked');
}

function clickData(evt) {
    var div;

    div = document.getElementById('data');
    div.innerHTML += 'btn2 click: ' + (new Date().getTime()) + '<br/>';
}

function loadHandler() {
    var btn;

    btn = document.getElementById('btn-click-alert');
    btn.addEventListener('touchend', clickAlert, false);
    btn = document.getElementById('btn-noclick');
    btn.addEventListener('touchend', clickData, false);
}

window.addEventListener('load', loadHandler, false);
</script>

</head>
<body>

<button id="btn-click-alert">Click to alert</button>
<button id="btn-noclick">No alert here</button>
<div id="data"> </div>
</body>
</html>

Может кто-нибудь помочь?

Спасибо!

1 Ответ

9 голосов
/ 20 марта 2012

Я полагаю, что визуальное, полностраничное предупреждение, запускаемое на сенсорном конце, влияет на цикл сенсорных событий. Попробуйте вызвать оповещение после сдачи в DOM. например.

setTimeout(function() {
    alert('btn clicked');
}, 0);
...