【问题标题】:touchend handler fires twicetouchend 处理程序触发两次
【发布时间】:2011-09-20 21:34:33
【问题描述】:

在 iOS 上的 web 应用程序上,我有一堆仅响应 touchend 的按钮(作为移动 safari 中单击延迟的快捷方式)。当我在处理程序中粘贴警报时,随后点击页面上的任何其他按钮都会触发这个原始处理程序,即使它们有自己的处理程序。下面是一些说明问题的示例代码:

<!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>

有人可以帮忙吗?

谢谢!

【问题讨论】:

    标签: javascript mobile-safari touch-event


    【解决方案1】:

    我认为在触摸结束时触发的视觉整页警报会干扰触摸事件周期。在屈服于 DOM 后尝试调用警报。例如。

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

    【讨论】:

    • 很好的答案,谢谢。您能否更深入地了解一下为什么会这样?例如,您修复了以下条件,但我不知道如何.. if (dragging){ setTimeout(function() { dragging = false; },0) return; }
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多