使用Ajax分页加载页面后,重新初始化其他JavaScript函数

8

抱歉,我是一个完全的新手。我该如何加载其他插件,并在加载ajax生成的页面后让其他独立脚本正常运行?这是我的当前代码:

jQuery(document).ready(function($) {
var $mainContent = $("load-content"),
siteUrl = "http://" + top.location.host.toString(),
url = ''; 

$(document).delegate("a[href^='"+siteUrl+"']:not([href*='/wp-admin/']):not([href*='/wp-login.php']):not([href$='/feed/'])", "click", function() {

if($.browser.msie){
var myie="/"+this.pathname;
location.hash = myie;
//alert(location.hash);

}else{

location.hash = this.pathname;
}
return false;
});


$("#searchform").submit(function(e) {

$search = $("#s").val();
$search = $.trim($search);
$search = $search.replace(/\s+/g,'+');

location.hash = '?s='+$search;
e.preventDefault();
});

$(window).bind('hashchange', function(){
url = window.location.hash.substring(1);
if (!url) {
return;
}

url = url + " #content";

$('html, body, document').animate({scrollTop:0}, 'fast');

$mainContent.fadeOut(500, function(){$('#content').fadeOut(500, function(){
$("#loader").show();});}).load(url, function() {
$mainContent.fadeIn(500, function(){
$("#loader").hide(function(){ $('#content').fadeIn(500);});});});
});
$(window).trigger('hashchange');


});

嵌入在页面上的对象如何保留其功能?主要是视频、幻灯片和其他使用JavaScript的媒体,例如video js (HTML5视频播放器)、Vimeo和WordPress投影片组合
1个回答

13

当您加载通过ajax生成的标记时,它将无法保留以前具有的功能。在您上面的示例中,当DOM准备好进行操作时,您正在初始化事物。为了确保在执行ajax请求后运行任何插件等,您需要重新初始化它们。

考虑到您上面的代码示例,我建议稍微重构一下。例如,您可以创建一个名为init的函数,用于调用以初始化某些插件:

function init () {
    $("#plugin-element").pluginName();
}

jQuery(document).ready(function () {
    // Initialise the plugin when the DOM is ready to be acted upon
    init();
});

然后,在您的ajax请求成功回调中,您可以再次调用它,这将重新初始化插件:

// inside jQuery(document).ready(...)
$.ajax({
    type: 'GET',
    url: 'page-to-request.html',
    success: function (data, textStatus, jqXHR) {
        // Do something with your requested markup (data)
        $('#ajax-target').html(data);            

        // Reinitialise plugins:
        init();
    },
    error: function (jqXHR, textStatus, errorThrown) {
        // Callback for when the request fails
    }
});

1
我找到了关于这个话题最好的答案。谢谢。重新初始化会导致明显的性能问题吗? - TimNguyenBSM
我也非常关心性能问题。我正在开发一个播放器,每次加载新页面时都会检查播放列表。它会更新数组中的每个页面。但是,我无法让我的 plugin.pagePlaylist() 正常工作。当我使用包含相同 pagePlaylist() 的 init() 函数时,它可以正常工作... 我更愿意只调用 pagePlaylist()。 - 6olden
@TimNguyenBSM,不会有性能问题。此外,如果有的话,没有插件初始化的ajax加载内容是幼稚和荒谬的。 - Ĭsααc tիε βöss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接