2013-04-10 53 views
1

我有两个jquery移动“页面”(divs指定为页面)在html页面上。每次进入页面时我都想调用方法。我挂钩方法在'pageinit'事件发射。但是,它只会被调用一次,并且不会在随后的changePage调用中调用。jQuery Mobile - pageinit处理程序不会调用后续changePage调用

这是jsFiddle to demonstrate。 (时间戳应该改变pageinit)

这里是我的全部代码https://gist.github.com/dev-e-loper/5356942

我的网页:

<div id="page1" data-role="page"> 
    <h1>One</h1> 
<a id="page1_link" data-role="button">go to page 2</a> 

    <div id="page1_output"></div> 
</div> 
<div id="page2" data-role="page"> 
    <h1>Two</h1> 
<a id="page2_link" data-role="button">go to page 1</a> 

    <div id="page2_output"></div> 
</div> 

代码挂钩pageinit处理程序:

$("#page1").live('pageinit', function() { 
    $("#page1_output").append('<br/> page 1 initialized. time - ' + new Date()); 
}); 


$("#page2").live('pageinit', function() { 
    $("#page2_output").append('<br/> page 2 initialized time - ' + new Date()); 
}); 


$("#page1_link").live('click', function() { 

    $.mobile.changePage($("#page2")); 

}); 

$("#page2_link").live('click', function() { 

    $.mobile.changePage($("#page1")); 

}); 

回答

3

pageinit会火当你的页面第一次加载。这两个页面都被缓存在DOM中,因此事件只会触发一次。尝试pageshow,每次显示页面时都会触发。

此外,live()已折旧。您应该使用bind()on()

http://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html

$("#page1").bind('pageshow', function() { 
    $("#page1_output").append('<br/> page 1 initialized. time - ' + new Date()); 
}); 


$("#page2").bind('pageshow', function() { 
    $("#page2_output").append('<br/> page 2 initialized time - ' + new Date()); 
}); 
+0

你会觉得结合'pageload'事件会工作,但事实并非如此。 'pageshow'尽管 – 2013-04-10 18:51:12

+0

工作'on'函数,页面使用jquery 1.6.4,所以它不可用。我会升级jquery并使用'on'来代替。谢谢 – 2013-04-10 18:53:32

+0

我不知道他们是如何想出页面事件名称的,但'pageload'也可能会让人困惑。页面是从缓存还是从服务器加载的?很高兴我能解决你的问题。 – andleer 2013-04-10 19:48:13