【问题标题】:reinitialize other javascript functions after loading a page with ajax pagination使用 ajax 分页加载页面后重新初始化其他 javascript 函数
【发布时间】:2012-10-30 13:16:37
【问题描述】:

抱歉,这里是个新手。如何加载其他插件,并在加载 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 video player)

vimeo

portfolio slideshow for wordpress

【问题讨论】:

    标签: javascript jquery ajax pagination


    【解决方案1】:

    当您加载 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
        }
    });
    

    【讨论】:

    • 我找到的关于这个主题的最佳答案。谢谢。重新初始化会导致明显的性能问题吗?
    • 我也很好奇性能问题。我正在开发一个播放器,它会在每个新页面加载时检查播放列表。它用每一页更新数组。不知何故,我无法让我的 plugin.pagePlaylist() 工作。当我使用 init();包含相同 pagePlaylist() 的函数...我宁愿只调用 pagePlaylist()。
    • @TimNguyenBSM,不,不会有性能问题。此外,如果是这样,在没有插件初始化的情况下加载 ajax 内容是幼稚和荒谬的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多