【问题标题】:Event firing multiple times (or even looping) on PhoneGap - Jquerymobile app在 PhoneGap 上多次触发事件(甚至循环) - Jquerymobile 应用程序
【发布时间】:2014-02-04 02:10:06
【问题描述】:

我有一个使用 Phonegap 和 JqueryMobile 开发的应用程序。

此应用在 iOS、Android 和 iPhone 上的下载次数总计约为 15.000 次。 代码在所有平台上完全相同。

后端服务器偶尔会过载,当我查看日志时,我发现一个用户正在发送数百次相同的呼叫。 (用户是真实的人,我已经和他们讨论过这个问题,所以它不是机器人或类似的东西)

对我来说,似乎点击事件正在循环或服务器调用正在循环但无法检测到原因。

这发生在 15.000 名用户中的 3 名(据我所知),并且用户在问题发生之前已经多次使用该应用程序。该问题发生在 Android 和 iOS 上,因此在我看来,jquerymobile/javascript 端存在问题。

知道是什么导致了这个问题吗?

【问题讨论】:

    标签: javascript events jquery-mobile cordova


    【解决方案1】:

    首先要注意你的 js/DOM 生成中的设计问题。

    当你绑定一个已经绑定的事件时,jquery 会再次绑定它而不检查那个事件是否已经被绑定。如果您想附加多个,那很好 事件函数到同一个事件。

    无论如何,有几种方法可以解决这个问题。一种是在绑定之前取消绑定事件,例如$.off()

    $("#myDiv").off("click").on("click", function(e) {
        // ...
    })
    

    另一个是检查事件函数内部是否已经触发了事件,例如:

    $("#myDiv").on("click",function(e) {
      if(e.handled !== true) {
          alert('Clicked');
          e.handled = true;
      }
    })
    

    您可以找到更多的解决方案及其优缺点here

    【讨论】:

      【解决方案2】:

      我最终在第一次触摸后禁用了按钮并解决了问题。

      似乎主要问题是点击了两次按钮,但由于某种原因我无法检测到之后,它进入了无限循环。

      【讨论】:

        【解决方案3】:

        你在 onclick 函数中做 event.preventDefault() 和 event.stopPropagation() 吗? (否则,浏览器的行为可能会有很大差异)

        其他想法,在 onclick 函数开始时隐藏或禁用按钮可能会很有用,以避免用户进行多次点击。

        我确定你已经在做这一切,但以防万一......

        【讨论】:

        • 谢谢。似乎 onclick 不是用户生成的,而是进入一个循环,因为我在服务器上每秒收到大约 3 个调用。这似乎不是传播问题。还有其他想法吗?谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多