1

我正在使用 jQuery Mobile 制作移动应用程序。进展顺利,但有一个主要问题我无法解决。

我有几个页面(数据角色=页面)的单个 index.html。因为我传递参数,所以我在我的 javascript 中使用点击事件调用这些页面。这些页面由从 json 文件(基于参数)创建(live pagebeforeshow)的列表视图组成。例如,在类别页面上,您单击某个类别,它的 ID 被传递到下一页,该页面在新列表中显示该类别的子类别。

现在奇怪的是,当我单击后退按钮或关闭对话框时,通常(并非总是)打开该页面或该对话框的单击事件会再次自动触发。例如,您单击列表中的一个项目。点击事件触发一个对话框弹出。您关闭对话框,列表(上一页)被重新加载并立即再次弹出对话框,好像单击事件再次被触发......非常奇怪。

我没有任何线索。

这是我用来告诉浏览器获取 json 并显示我需要的内容的事件示例。

$('#dialog_zin_nl').live('pagebeforeshow', function(event, data) {

*这里是这个页面上必须发生的所有代码,比如获取正确的 json 内容并将其附加到 html...

之后(在这个'pagebeforeshow'内)我声明我的按钮点击事件是这样的

$("#execute_sub_rubriek").on("click", ".selected_zin_nl", function(event){
                    var selected_zin_nl  = $(this).attr('selected-zin-nl');
                    $.mobile.changePage( "#dialog_zin_nl?current_rubriek=" + current_rubriek_id + "&current_sub_rubriek=" + current_sub_rubriek_id + "&current_zin=" + selected_zin_nl + "", { role: "dialog"} );
                  });

如果有人遇到过同样的问题或知道出了什么问题。请解释一下。

谢谢!

编辑如果我使用 pageinit 我没有这个问题。虽然我不能使用 pageinit,因为当用户选择另一个类别时,必须刷新页面的内容。

我的一个想法:如果页面被后退按钮调用,是否可以调用 pageinit,如果页面被另一个按钮调用,是否可以调用 pagebeforeshow?

4

1 回答 1

2

on在事件中添加了一个侦听器,pagebeforeshow并且由于pageshow在您导航回页面时触发,它将添加第二个 on侦听器,这就是您的代码行为异常的原因。

您需要将您的代码pageinitpageshow代码分开,仔细考虑 pageinit 应该只初始化一个页面,每次查看页面时都会调用 pageshow,因此如果您有动态内容,您应该在那里刷新您的 DOM,但将您的on侦听器附加到您pageinit的发生一次。

这是一个类似问题的链接,它突出了我们如何在 jQM 网站上清理我们的 JS:https ://stackoverflow.com/a/9368352/737023 - 如果你以这种方式组织它,它会更有意义 - 特别是跟踪什么时候开火,什么时候开火。

于 2012-10-04T22:57:10.613 回答