您的问题是您正在使用document.ready
为通过 AJAX 引入 DOM 的页面运行代码。这意味着,如果您想为添加到 DOM 的每个页面绑定一个事件,您应该使用pageinit
或pagecreate
。
改变:
$(function(){
var sidebar = $('.hor-nav');
sidebar.delegate('a.inactive','click',function(){
sidebar.find('.active').toggleClass('active inactive');
$(this).toggleClass('active inactive');
});
});
至:
//run this code when a pseudo-page is added to the DOM
$(document).delegate('[data-role="page"]', 'pageinit', function(){
//only get the .hor-nav elements in this pseudo-page
var $sidebar = $(this).find('.hor-nav');
//no need to delegate here since the elements for this page exist in the DOM now
$sidebar.find('a').bind('click',function(){
$sidebar.find('.active').toggleClass('active inactive');
$(this).toggleClass('active inactive');
});
});
这将对始终存在于 DOM ( document
) 中的元素使用事件委托,而如果.hor-nav
元素是外部页面的一部分,则这些元素并不总是存在于 DOM 中。
看起来您还有其他依赖于document.ready
事件的代码,而 jQuery Mobile 网站不应该是这种情况。看看这个文档: http: //jquerymobile.com/demos/1.1.0/docs/api/events.html(注意大的黄色警告)