2012-11-10 17 views
6

Przeprosiny, totalna nowość tutaj. Jak mogę załadować inne wtyczki i pozwolić innym oddzielnym skryptom działać po załadowaniu wygenerowanej strony ajax? To jest mój obecny kod:reinicjować inne funkcje javascript po załadowaniu strony z paginacją 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'); 


}); 

W jaki sposób osadzone obiekty na stronach zachowują swoją funkcjonalność? Głównie filmy, pokazy slajdów i inne nośniki, które używają JavaScript jak

video js (html5 video player)

Vimeo

i

portfolio slideshow for wordpress

Odpowiedz

11

Po załadowaniu ajax generowane znaczników nie zachowa funkcjonalność to miało przed. W powyższym przykładzie inicjujesz rzeczy, gdy DOM jest gotowy do działania. Aby upewnić się, że wszelkie wtyczki itp. Są uruchomione po wykonaniu żądania ajax, należy je ponownie zainicjować.

Biorąc pod uwagę próbkę kodu powyżej, polecam trochę restrukturyzacji. Na przykład, można utworzyć funkcję zwaną init który można zadzwonić do zainicjowania pewnych wtyczek:

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

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

a następnie następstwie tego na zwrotnego sukces z was ajax żądanie, można nazwać to kolejny, który będzie ponownie zainicjować wtyczek :

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

najlepsza odpowiedź na ten temat znalazłem. Dzięki. Czy ponowne inicjowanie powoduje zauważalne problemy z wydajnością? – TimNguyenBSM

+0

Jestem również ciekawy problemów z wydajnością. Pracuję nad odtwarzaczem, który sprawdza listę odtwarzania przy każdym nowym ładowaniu strony. Aktualizuje tablicę przy każdej stronie. Jakoś nie mogę uruchomić mojej wtyczki.playPlaylist(). Działa, gdy używam init(); funkcja, która zawiera tę samą funkcję pagePlaylist() ... wolałbym tylko wywoływać funkcję pagePlaylist(). – 6olden

+0

@TimNguyenBSM, Nie będzie żadnych problemów z wydajnością. Poza tym, jeśli tak, posiadanie załadowanego ajax'a bez inicjalizacji wtyczki jest dziecinne i absurdalne. –

Powiązane problemy