使用“pagebeforeshow”而不是“pagecreate”事件,因为 pagecreate 在创建该页面时只会被调用一次。
所以,如果你想每次改变页面都得到一个事件,你应该使用'pagebeforeshow'、'pagebeforehide.'pageshow'或'pagehide'。
我推荐pagebeforeshow在页面显示之前更改 UI。:)
您是否使用 .remove() API 将“选择”从上一页移动到新页面?.remove() 从父元素及其数据和事件中删除一个元素。因此,您应该在删除后重新定义事件处理程序。
此外, .detach() 仅用于从其父元素中分离元素。但它有一些关于jquery mobile 增强的问题。
我在上面发布了一个 jsfiddle。jsfiddle.net/cwdoh/ZaVch
由 SHANNON 编辑...以防将来删除小提琴,这是您的代码:
<div data-role="page" id="page1">
<div data-role="header">
<h1>Page 1</h1>
<select id="language-select">
<option>Korean</option>
<option>English</option>
<option>JavaScript :)</option>
</select>
</div>
<div data-role="content">
<a data-role="button" href="#page2">go to Page2</a>
</div>
</div>
<div data-role="page" id="page2">
<div data-role="header">
<h1>Page 2</h1>
</div>
<div data-role="content">
<a data-role="button" href="#page1">go to Page1</a>
</div>
</div>
$(document).on( "pagebeforeshow", function( e, data ) {
// move language-select from previous page
var selectMenu = data.prevPage.find( "#language-select" );
selectMenu
.remove() // remove from previous page
.appendTo( $(e.target) // append to active page
.find( "[data-role='header']" ) );
// bind event handler after append
$("#language-select").bind( "change", function() {
alert( "language-select changed" );
});
// re-build
selectMenu.selectmenu();
});