0

我知道当您在 jQuery Mobile 中创建侦听器时,例如:

$('.this-class').on('swipe',tapHandler);

tapHandler 将运行两次。为了消除这个问题,我看到了多种解决方案,例如:

$('.page-card').off('swipe').on('swipe',tapHandler);

或者

如果您在此处创建动态内容,则将其包装在其中pageinit以消除 chachingpagebeforeshow问题。

我也明白,甚至冒泡也会在这里发挥作用。

但是,我希望有人能解释为什么存在这种已知的东西,以及为什么 jQuery 的贡献者决定走这条路,知道它的缺点。

4

1 回答 1

2

首先让我们讨论如何jQuery Mobile工作。jQuery与使用jQuery Mobileajax 将页面加载到的普通网页不同DOM,可以加载一个或多个页面。正因为如此,经典文档就绪是无用的,因此jQM开发人员创建了页面事件。

页面事件是这个故事的主要内容。虽然文档就绪每页只会触发一个,但大多数页面事件会触发多次,具体取决于重新/访问页面的时间。

让我们回到on函数(以及所有其他类似的函数,如binddelegate、 deprecated live)。同样,在处理普通页面时,您永远不会遇到这种情况,因为同一页面永远不会停留在DOM.

来了jQuery Mobile。如果您在 pageshow(或类似的页面事件)中使用绑定方法,该事件将一遍又一遍地绑定。基本上on方法从来没有打算像这样使用。

如果您想了解有关预防方法的更多信息,请查看我的其他答案,查找主题:防止多个事件绑定/触发

于 2013-05-24T18:57:36.440 回答