事件在PhoneGap - Jquerymobile应用程序上多次触发(甚至循环)

时间:2014-01-14 18:13:16

标签: javascript events jquery-mobile cordova

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

此应用已在iOS,Android和iPhone中下载约15.000倍。 代码在所有平台上完全相同。

有一段时间后端服务器超载,当我查看日志时,我看到一个用户发送了数百次相同的呼叫。 (用户是真实的人,我和他们谈过这个问题,所以它不是机器人或类似的东西)

对我来说,似乎click事件是循环或服务器调用是循环但无法检测原因。

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

知道可能导致此问题的原因是什么?

3 个答案:

答案 0 :(得分:6)

我要先说明你的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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

我相信你已经做了这一切,但以防万一......