2012-11-10 28 views
6

Xin lỗi, một tổng số newb ở đây. Làm cách nào để tải các plugin khác và cho phép các tập lệnh riêng biệt khác hoạt động sau khi tải trang được tạo ajax? Đây là mã curent của tôi:reinitialize các hàm javascript khác sau khi tải một trang với phân trang 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'); 


}); 

Làm cách nào để nhúng các đối tượng trên trang? Chủ yếu là video, trình chiếu và phương tiện truyền thông khác mà sử dụng javascript như

video js (html5 video player)

vimeo

portfolio slideshow for wordpress

Trả lời

11

Khi bạn tải ajax tạo đánh dấu nó sẽ không giữ lại chức năng nó có trước. Trong ví dụ trên, bạn đang khởi tạo mọi thứ khi DOM sẵn sàng hoạt động. Để đảm bảo mọi plugin, v.v., đang chạy sau khi bạn thực hiện yêu cầu ajax, bạn cần phải khởi động lại chúng.

Với mẫu mã ở trên, tôi khuyên bạn nên tái cơ cấu một chút. Ví dụ, bạn có thể tạo một hàm gọi là init mà bạn có thể gọi để khởi plugin chắc chắn:

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

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

Và rồi sau này, trên gọi lại thành công của bạn ajax yêu cầu, bạn có thể gọi nó một lần nữa mà sẽ reinitialise các plugin :

// 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

câu trả lời hay nhất về chủ đề này tôi đã tìm thấy. Cảm ơn. Có reinitializing gây ra vấn đề hiệu suất đáng chú ý? – TimNguyenBSM

+0

Tôi thực sự tò mò về các vấn đề hiệu suất là tốt. Tôi đang làm việc trên trình phát để kiểm tra danh sách phát trên mỗi lần tải trang mới. Nó cập nhật mảng với mỗi trang. Bằng cách nào đó tôi không thể có được plugin.pagePlaylist() của tôi để làm việc. Nó hoạt động khi tôi sử dụng init(); chức năng có chứa cùng một pagePlaylist() ... Tôi chỉ muốn gọi trang pagePlaylist(). – 6olden

+0

@TimNguyenBSM, Không có vấn đề về hiệu suất. Bên cạnh đó, nếu có, có một nội dung được tải ajax mà không cần khởi tạo plugin là trẻ con và vô lý. –

Các vấn đề liên quan