如何在jQuery Mobile中初始化页面? pageinit不会触发

什么是正确的方式来初始化jquery移动页面上的对象? 事件文档说使用“ pageInit() ”没有这个函数的例子,但给“绑定到pageinit ”方法的例子(注意大小写区别)。 但是,在这个简单的testing页中,我完全没有看到事件发生:

 <html> <body> <script type="text/javascript" charset="utf-8" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <script type="text/javascript" charset="utf-8" src="http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.js"></script> <div data-role="page" id="myPage"> test </div> <script> $("#myPage").live('pageinit',function() { alert("This never happens"); }); </script> </body> </html> 

我错过了什么? 我应该补充说,如果你把pageinit另外一个像pagecreate这样的代码就行了。

—-更新—-

这个bug在JQM问题跟踪器中被标记为“closures”。 显然意见不同,这是否正常工作。

当我在页面div中embedded脚本时,它开始工作:

 <body> <div id="indexPage" data-role="page"> <script type="text/javascript"> $("#indexPage").live('pageinit', function() { // do something here... }); </script> </div> </body> 

使用jQuery Mobile 1.0RC1

.live()已被弃用,build议在jQuery 1.7+中使用.on()

 <script type="text/javascript"> $(document).on('pageinit', '#indexPage', function(){ // code }); </script> 

查看在线文档以获得更多关于.on() : http : .on()

原来这是1.0b3中的一个bug ,在当前头文件中是固定的。 所以,如果你现在想要一个修补程序,你必须从Git抓取最新的。 或等待下一个版本。

 jQuery(document).live('pageinit',function(event){ centerHeaderDiv(); updateOrientation(); settingsMenu.init(); menu(); hideMenuPopupOnBodyClick(); }) 

这现在正在工作。 现在,所有的页面转换和所有的JQM AJAXfunction将与您定义的javascriptfunction一起工作! 请享用!

如果它是在普通的<script>标签中写入的,pageinit将不会触发它在辅助页面上(NOT MAIN页面)。

我有这样的问题 – 在没有加载“rel =”external“”的辅助页面上,公共<script>标记中的代码从未被执行…

真的这个代码总是执行…

 <body> <div id="indexPage" data-role="page"> <script type="text/javascript"> $("#indexPage").live('pageinit', function() { // do something here... }); </script> </div> </body> 

如果你做了“标签界面”,使用“pageshow”更好

我不得不把脚本放在HTML页面部分对我来说是一个错误。 它通常在浏览器(而不是通过AJAX),并在一个单一的页面,包括JavaScript加载。 我们不应该使用文档准备好。

我发现处理这个最简单的方法是使用JQM +窃取。 只要你说:它就像一个魅力。

 <script type='text/javascript' src='../steal/steal.js?mypage'></script> 

data-role='page' page'div里面。

然后使用AJAX连接任何可以使用相同的mypage.js并使用外部链接(通过使用rel="external"标签)的任何需要不同的窃取页面的任何东西。

@WojciechBańcer

从jQuery文档:

 As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live(). 

尝试这个:

 $('div.page').live('pageinit', function(e) { console.log("Event Fired"); }); 
 $(document).on("pageinit", "#myPage", function(event) { alert("This page was just enhanced by jQuery Mobile!"); }); 

只有在通过Ajax加载的页面上,事件才会在最初的页面上触发。 在上述情况下,您可以:

 <script> $(document).ready(function() { alert("This happens"); }); </script>