【问题标题】:listening for touchend sometimes fires click event mobile监听 touchend 有时会触发点击事件移动
【发布时间】:2013-12-16 09:39:16
【问题描述】:

我有一个正在使用 phonegap 构建的应用程序。

我正在监听 touchstart/touchend 事件以使其响应。

有时,touchend 的事件侦听器会触发,但随后,例如,输入将在 300 毫秒后触发 click 事件后聚焦。

一个例子是,我有一个菜单侧边栏。每个侧边栏列表项都会监听 touchend 事件。收到事件后,侧边栏关闭并显示相关页面。但是,如果相关页面包含用户单击侧边栏列表项的表单元素,则该表单元素将获得焦点。

在整个应用程序中阻止这种情况的最佳方法是什么?它发生在各种场景中,因手机而异。

我尝试过诸如 stopPropagation 之类的方法,但这些仅在少数情况下有效,我需要一个通用的跨应用解决方案,而不是为每个功能添加,如果可能的话。

类似:

$('body').on('touchend', function(){
    //stop any further touchends/ clicks from firing
    //apart from the 1 i do want
})

【问题讨论】:

  • 你试过event.preventDefault()吗?
  • 你应该看看hammer.js - 它为这类事情做了所有繁重的工作
  • 嗨,这有时也有效,但似乎不适用于每种情况编辑:对于 preventDefault() 选项

标签: javascript jquery mobile cordova


【解决方案1】:

你可以试试 'touchcancel' 而不是 'touchend',看看它是否有效 :) 祝你好运。

【讨论】:

    【解决方案2】:

    您的应用程序运行速度很快;) 简单的方法: 只需放置一个 setTimeout(gotopage(),100) 在每个按钮/菜单操作上

    很难: 如果你真的不想设置 setTimeout,你应该看看冒泡是如何工作的,问题就在这里

    提示: 无论如何,为了避免 300 毫秒,你应该使用 FTLABS 的 Fastclick : https://github.com/ftlabs/fastclick 和使用点击事件,它会为你完成这项工作(你仍然必须使用 settimeout 技巧)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-13
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多