0

我正在开发一个 jQuery Mobile 和 PhoneGap 应用程序。我正在使用这段代码:

$('#contact').live('pageinit', function() {
    //$.mobile.loading('show');
    theme();
    getData('contact/list',contactList);
    //$.mobile.loading('hide');
});

第一次访问页面时,效果很好。在第二次尝试中,事件被多次触发。我尝试使用bind但它不起作用。

我认为这与live事件有关。每次我初始化页面时都会绑定它,这使它成为多个。以这种方式链接时问题得到解决:window.location.href-它重新创建 DOM。不幸的是我不能使用它。

有没有其他方法可以处理pageinit

我试图早点找到它,但没有成功。还看了:click() 多次触发

4

4 回答 4

0

我通常使用该on()方法而不是live()(现在已弃用)。我给我的每个页面容器一个id,所以在索引页面上它可能是index,然后我可以绑定到如下事件:

$(document).on("pageinit", "#index", function() {
    //do stuff here
});

页面显示的工作方式也相同。

于 2012-09-20T12:38:22.997 回答
0

理论上,任何可以被“live”绑定的事件都可以直接绑定。直接绑定的好处是它将(iirc)覆盖先前绑定的处理程序。因此,您将只有一个处理程序,因此在后续加载时不会多次触发它。

尝试类似:

$("#contact").pageInit(function() {
  theme();
  getData('contact/list', contactList);
});
于 2012-09-20T12:41:59.373 回答
0

在 jquery mobile 中绑定事件时,您必须非常小心,以确保它们不会被多次绑定。在 jquery mobile 中导航到新页面不会像在更传统的导航中那样“重置”绑定事件。您面临的问题很可能是由于每次访问页面时都会绑定到事件的函数,这意味着您访问页面的次数越多,执行该函数的次数就越多。为了确保事件只绑定一次,我建议在初始页面的标题中绑定。这样一劳永逸地绑定了事件,每当这个页面启动时,函数就会运行。

于 2012-09-20T13:50:23.550 回答
0

您可以尝试将 data-ajax="false" 添加到您提交的任何可能创建页面的多个版本(多次触发事件)的表单中。

于 2014-04-29T14:33:09.967 回答