Jquery mobile 如何在jquery mobile中初始化页面?pageinit未启动

Jquery mobile 如何在jquery mobile中初始化页面?pageinit未启动,jquery-mobile,Jquery Mobile,在jquery移动页面上初始化对象的正确方法是什么?声明使用“pageInit()”时没有该函数的示例,但给出了绑定到“pageInit”方法的示例(注意大小写差异)。但是,在这个简单的测试页面中,我根本看不到事件触发: <html> <body> <script type="text/javascript" charset="utf-8" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jqu

在jquery移动页面上初始化对象的正确方法是什么?声明使用“
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>

测试
$(“#myPage”).live('pageinit',function(){
警惕(“这永远不会发生”);
});
我错过了什么?如果将
pageinit
更改为另一个事件,如
pagecreate
,我应该补充一点,这段代码有效

----更新----


这在JQM问题跟踪程序中标记为“已关闭”。显然,对于这是否正常工作,人们的看法不同。

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

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

$(文档).ready(函数(){
警惕(“这种情况发生”);
});

这是一个固定在当前磁头中的in 1.0b3。因此,如果你现在想要修复,你必须从中获取最新信息。或者等待下一个版本。

当我在page div中嵌入脚本时,它开始工作:

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

$(“#indexPage”).live('pageinit',function(){
//在这里做点什么。。。
});

使用jquerymobile1.0RC1时,我不得不将脚本放在HTML页面部分,这对我来说是一个bug。它通常在浏览器(而不是通过AJAX)中加载,所有内容都在一个页面(包括javascript)上加载。我们不必使用document ready(文档准备就绪)。

尝试以下方法:

$('div.page').live('pageinit', function(e) {
    console.log("Event Fired");
});

这正在起作用。现在,所有页面转换和所有jqmajax功能都可以与您定义的javascript函数一起工作!享受吧

我发现处理这个问题的最简单方法是使用JQM+Steal。它就像一个符咒,只要你:

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

data role='page'
div的内部

然后使用AJAX将任何可以使用相同的
mypage.js
的东西连接起来,并使用外部链接(通过使用
rel=“external”
标记)连接到任何需要不同窃取页面的东西。

.live()
不推荐使用,建议使用jQuery 1.7+中的
.on()

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

$(document).on('pageinit','#indexPage',function(){
//代码
});

查看在线文档以了解有关
。on()

pageinit的更多信息,如果它位于辅助页(而不是主页面),如果它是用公共标记编写的,则不会启动它

我有这样一个问题-在没有加载'rel=“external”'的辅助页面上,公共标记中的代码永远不会执行

<body>
    <div id="indexPage" data-role="page">
        <script type="text/javascript">
            $("#indexPage").live('pageinit', function() {
                // do something here...
            });
        </script>
    </div>
</body>
实际上,这段代码总是被执行

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

$(“#indexPage”).live('pageinit',function(){
//在这里做点什么。。。
});
尽管您制作了“选项卡式界面”,但使用“pageshow”更好

从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().

那么,为什么文档会说“我们建议绑定到[pageinit]而不是DOM ready(),因为无论页面是直接加载的,还是内容作为Ajax导航系统的一部分拉到另一个页面中,这都会起作用。”我想我们的目的是相反的。我以为你想知道如何更改登录页。最新的文档说“然而,在jQuery Mobile中,Ajax用于在导航时将每个页面的内容加载到DOM中,DOM就绪处理程序只在第一个页面执行。要在加载和创建新页面时执行代码,可以绑定到pagecreate事件。”pagecreate也不适用于我(在1.0b3中),当页面通过Ajax加载时,只有在没有Ajax的情况下才能工作。这和pageinit的错误是一样的吗?只在将节放在节中时才起作用(不幸的是,按照xhtml不是真正干净的html,但是哦,好吧…),我也有同样的问题。page init仅在放置在正文中时才起作用。此报告为中的错误,但已关闭。不过,在我看来,这似乎是一个bug。1.0 RC1刚刚发布,它解决了这个问题。它不适用于git HEAD的“最新”版本。你用过那些吗?我刚刚对github问题添加了另一条评论。这对我仍然不起作用。这是我的现场测试(使用您的代码,但使用git HEAD的最新css/js):RC1中的相关错误,其中pageinit不会在ajax加载的页面上触发:我刚刚验证了它在1.1中仍然是一个错误。该错误在1.3.2中仍然存在,脚本仅在您将其放在div中时才会执行。我使用的是RC1,我有完全相反的问题,我添加了pageinit来为ajax调用进行事件绑定。每次加载页面时,对pageinit事件方法的调用都会增加,例如,如果我访问该页面三次,在第三次访问时,相同的方法会被调用三次。你知道为什么会发生这种事吗?我也有同样的问题…@JLaw这里是我关于SO的问题,我正在进行隐藏的杀戮活动。但仍然对我使用的解决方案不满意。@SutikshanDubey最近发现的一件事是,每次加载页面时,我都无意中创建了多个事件处理程序。我在“pageshow”处理程序中有一些代码,会在“click”事件中触发。每次启动“pageshow”时,都会为“click”创建一个新的处理程序。正因为如此,我的操纵杆多次失灵。也许你遇到了类似的问题?您是否有多个处理程序在不知不觉中执行相同的任务?我可以确认此解决方案也适用于1.0版本。不确定问题是什么。这似乎只是使用jQuery Mobile时养成的一个好习惯——将与页面对应的所有内容都放在您的页面中,然后无论片段是否加载了AJAX,它都会起作用。尽管在以后的版本中已经有了针对这种每页功能的更新,尽管看起来似乎没有
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().