【发布时间】:2014-03-25 12:41:01
【问题描述】:
我正在使用单页开发 JQM 主题。我还有一个侧边栏/面板,它是作为单独的 html 文件构建的。该面板使用如下JS导入JQM页面;
/* Creates the functionality to open the left side panel with a swipe */
$(document).one("pagebeforecreate", function () {
$.get('left-panel.html', function(data){
$.mobile.pageContainer.prepend(data);
$("[data-role=panel]").panel().enhanceWithin(); // initialize panel
}, "html");
});
我在每个页面底部加载的 js 文件中都有这个脚本,因为“移动网站”的用户可以通过任何页面进入。
我通过 Firebug 注意到,我导航到的每个页面似乎都添加了一个面板实例。所以如果我访问 3 个页面,面板将被加载 3 次,4pages = 4 个面板,等等。
公平地说,我在 JQ 和 JQM 上还是个新手,但我的印象是使用
$(document).one
意味着该事件每页只发生一次,因此可以防止我遇到的问题。
如果您能帮助我解决如何防止此问题,我将不胜感激。
【问题讨论】:
-
pagbeforecreate将每页触发一次,我使用.one()捕获第一个pagebeforecreate来运行代码。检查一下,萤火虫,你会发现两个面板jsfiddle.net/Palestinian/ee5pp -
另一种方法是在
mobileinit上注入面板,尽管有页数,每个文档/框架都会触发一次。mobileinit在加载jQM之前触发,注入一个面板然后在加载jQM之后初始化它jsfiddle.net/Palestinian/PGv9t -
有很多方法,1)
mobileinit就像我之前的评论一样。 2) 在pagebeforecreate内部检查面板是否存在于DOMvar panelDOM = $("[data-role=panel]").length;if ==0添加面板,如果>0,则不要添加。 -
很酷,谢谢。一如既往..谢谢!!
-
我的荣幸 :) 这是第二种方法jsfiddle.net/Palestinian/yWE5h
标签: javascript jquery jquery-mobile