2011-12-02 35 views
2

我正在开发一个使用jQuery Mobile库的移动网站。我有一个页眉,页脚和主页上的内容区域,任何环节都使用下面的代码加载到内容区域:jquery移动样式为异步包括div

$("a").click(function() { 
var toLoad = $(this).attr('href'); 

// Loading image 
$('#content-body').html('<table class="loader"><tr><td><img src="<?php echo SITE_ROOT; ?>/img/ico/loader.gif" /></td></tr></table>'); 

$('#content-body').load(toLoad); 

这工作得很好,除了jQuery Mobile的样式不适用于这种方式包含的内容。例如,home页面包括按钮:

<a href="?Inventory" data-role="button">Inventory</a> 

但是,当我异步加载该页面添加到content DIV,该链接不以按钮形式显示。有没有什么办法可以告诉jQuery Mobile每次使用#content重新加载移动样式?

回答

4

你当然可以。你想用.trigger('create')初始化任何jQuery Mobile的小工具:

$("a").click(function() { 
    var toLoad = $(this).attr('href'); 

    // Loading image 
    $('#content-body').html('<table class="loader"><tr><td><img src="<?php echo SITE_ROOT; ?>/img/ico/loader.gif" /></td></tr></table>'); 

    $('#content-body').load(toLoad, function() { 
     $(this).trigger('create');//it's that easy :) 
    }); 
}); 

请注意,您要初始化窗口小部件的父元素调用.trigger('create')。另请注意,由于您通过异步功能加载内容,因此您需要在调用​​调用的回调函数中调用.trigger('create'),以便在尝试初始化元素时实际存在初始化元素。

此外,您有时可能会遇到小部件已初始化的问题,但之后您更改了它的HTML并想要刷新小部件。有功能做到这一点,如:.listview('refresh').slider('refresh')

我只是回答了有关需要进行初始化或刷新小窗口的问题:how to refresh jquery mobile listviews

而且你会想改变.click().delegate()如此通过AJAX加载的链接也会附加此事件处理程序:

$('#content-body').delegate('a', 'click', function() { 
    var toLoad = this.href;//no need to use jQuery here since `this.href` will be available in all major browsers 

    // Loading image 
    $('#content-body').html('<table class="loader"><tr><td><img src="<?php echo SITE_ROOT; ?>/img/ico/loader.gif" /></td></tr></table>'); 

    $('#content-body').load(toLoad, function() { 
     $(this).trigger('create');//it's that easy :) 
    }); 
}); 
+0

看起来很有前途,但仍然无法正常工作。作为一个更简单的例子,当应用程序第一次加载时,它会为初始内容进行AJAX调用。我现在用 '$('#content-body')。load('<?php echo SITE_ROOT?> /?home')。trigger('create');' 相关的HTML是: '

' 和所有我试图加载在现在是一个文件,其中包含: ''Link button 那么为什么这个链接是没有出现的按钮有什么想法? – dlwiest

+0

@nostalgicBadger下面是我的代码示例:http://jsfiddle.net/jasper/XpMJF/。现在我正在查看上面的代码,我可以看到它为什么不起作用,它在'.load()'完成之前运行'.trigger('create')'。因此'.trigger('create')'应该在'.load()'调用的回调函数中。我的答案已更新。 – Jasper

+0

完美的作品。谢谢! – dlwiest