在jquery移动页面上初始化对象的正确方法是什么? events docs说使用“pageInit()
”没有该函数的示例,但提供绑定到“pageinit
”方法的示例(注意案例差异)。但是,在这个简单的测试页面中,我没有看到事件发生:
<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问题跟踪器中标记为“已关闭”。显然,对于这是否正常工作,意见不一。
答案 0 :(得分:66)
当我在页面div中嵌入脚本时,它开始工作了:
<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
答案 1 :(得分:21)
.live()
,建议在jQuery 1.7+中使用.on()
:
<script type="text/javascript">
$(document).on('pageinit', '#indexPage', function(){
// code
});
</script>
查看在线文档,了解有关.on()
:http://api.jquery.com/on/
答案 2 :(得分:9)
答案 3 :(得分:2)
jQuery(document).live('pageinit',function(event){
centerHeaderDiv();
updateOrientation();
settingsMenu.init();
menu();
hideMenuPopupOnBodyClick();
})
现在正在运作。现在所有页面转换和所有JQM AJAX功能都可以与您定义的javascript函数一起使用!享受!
答案 4 :(得分:2)
我有这样的问题 - 在未加载'rel =“external”'的辅助页面上,常见&lt; script&gt;中的代码标签永远不会被执行......
这个代码总是被执行......
<body>
<div id="indexPage" data-role="page">
<script type="text/javascript">
$("#indexPage").live('pageinit', function() {
// do something here...
});
</script>
</div>
</body>
如果您制作“标签界面”,则使用“pageshow”更好
答案 5 :(得分:1)
我不得不把脚本放在HTML页面部分,对我来说这是一个错误。它通常在浏览器中加载(不是通过AJAX),而是在包含javascript的单个页面上加载。我们不应该使用文件准备好。
答案 6 :(得分:1)
我发现解决这个问题的最简单方法是使用JQM + Steal。只要你放下它就像魅力一样:
<script type='text/javascript' src='../steal/steal.js?mypage'></script>
data-role='page'
div。
然后使用AJAX连接任何可以使用相同mypage.js
的内容,并使用外部链接(使用rel="external"
标记)来处理需要不同窃取页面的任何内容。
答案 7 :(得分:1)
@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().
答案 8 :(得分:0)
试试这个:
$('div.page').live('pageinit', function(e) {
console.log("Event Fired");
});
答案 9 :(得分:0)
$(document).on("pageinit", "#myPage", function(event) {
alert("This page was just enhanced by jQuery Mobile!");
});
答案 10 :(得分:-2)
事件不会在初始页面上触发,仅在通过Ajax加载的页面上触发。在上面的例子中你可以:
<script>
$(document).ready(function() {
alert("This happens");
});
</script>