0

好吧,诚然这里有很多话,但这是我以前从未见过的问题,而且是一个很奇怪的问题。因此,它可能值得一读。

我有一个页面动态生成 Listviews 以响应从 $.mobile.autocomplete 单击的链接。
列表视图有两种类型<li>'s,并且有相应的主题,并有一个相应的类设置或不设置。
我们称它们为 l-1 和 l-2。

当我单击l-1时,应该发生的是该 listitem 切换了一个类,该类给出了被选择项目的外观,类似于 $.ui.selected - 每个列表只允许一个选定的项目。
这很容易使用基本的 jQuery 完成。

当我单击l-1时,还应该发生的事情是进行 ajax 调用,将特定值发送到服务器,以及一个回调函数,该函数突出显示页脚文本绿色表示成功,红色突出显示出现错误。

当我单击l-2时会发生什么,该列表被另一个列表替换,该列表位于该特定层次结构的下一层。

实施起来有点棘手,但是一旦我弄清楚了,就没有什么不简单的了。它有效....有点。

这是奇怪的事情。如果我转到该页面一次,选择一个项目,然后执行上述步骤,一切都会按预期进行。(我们这里只看l-1)。我可以根据需要多次通过自动完成生成列表视图,单击l-1,应用样式,成功触发 ajax,突出显示元素,瞧!我很高兴,并鼓励地拍拍自己的背。

然而,这就是奇怪的开始——假设我通过返回主页离开页面(不使用后退按钮,而只是一个简单的 jQuery Mobile 链接),然后在那里,我点击链接带我回到这个页面,我被带回来了。假设这个页面被称为Page-2。在第 2 页上,事情开始顺利:我使用自动完成生成列表,但是当我单击l-1项目时,会发生(或不发生)以下情况:

  1. 该样式不适用于列表项。
  2. ajax 请求被调用,并返回成功。
  3. 成功元素被突出显示。
  4. 奇怪的是,ajax 被调用了两次并返回相同的数据。

如果我离开然后再回来,同样的事情会发生,除了

  1. 该样式应用于列表项
  2. ajax 调用现在进行了3次。

这种模式以以下方式继续(大概有一段时间 - 我尝试了 8 次):

  1. 在奇数 #'d 回程时,应用样式例如(第 3 次回程、5 次、7 次)
  2. 甚至 #'d 会返回,样式应用。例如(第 4、第 6、第 8)
  3. 每次返回,发出的 ajax 请求数增加一。在第一次旅行和第 8 次旅行时查看网络面板的照片(这是由相同的鼠标单击生成的)。

第一次访问,1 次点击

第 8 页访问,1 次点击

您可以通过右键单击图像并选择在新选项卡中打开来以新选项卡的全尺寸打开图像。

任何见解?

更新:2012 年 9 月 27 日,美国东部标准时间下午 1:05。

修复了样式不会应用于偶数页访问时单击的按钮的问题,尽管由于潜在问题,我不禁觉得修复只是一个修复。也许我的解决方案修复了它的事实将更好地阐明这个问题。

解决方案是将按钮的样式从 ajax 调用之前移动到回调,因此在 ajax请求完成之前不会应用样式。

4

1 回答 1

0

好吧 - 好吧,我想这对任何人来说都太长了,没有时间阅读它。我想出了一个解决方案,尽管我认为该解决方案并没有解决问题的核心。解决方案是在调用重复 ajax 之后直接添加 $.fn.event.stopPropagation。

为什么这应该有所帮助是解决问题的线索。我唯一能想到的会产生这个问题,并且让我的解决方案修复它是每次调用 pageInit 时都会以某种方式调用(无论我在哪里绑定它,结果都是相同的,即我尝试了 pageLoad、pageShow 等)该函数被克隆并附加到不断增长的函数的末尾,该函数一直绑定到 pageInit。

当然那是没有意义的,我在其他地方从来没有发生过这种情况,所以我很茫然,但是,现在,不管怎样,它已经修复了,目前还没有发现明显的不利影响。

于 2012-09-30T21:56:05.103 回答