如何在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>