我有一個網頁,頁面的內容由ajax加載。我所有的頁面實際上都是分開的文件,當我需要調用一個頁面時,我只是將鏈接傳遞給了我的「pageLoader」函數。Ajax加載器和事件運行不止一次
pageLoader句柄,加載內容並重新啓動/重新定義必要的功能,如關閉按鈕。
由於實際功能有250行,我重新寫了一個短版本;
var pageLoader = function(link){
var page = $(link).attr("href").replace('#','');
if(page != lastCalledURL){
// Load the page.
$.ajax({
beforeSend: function(){ /* remove previously loaded content; */ },
success: function(data){
// remove the loaded content if user clicked to close button.
$("a.close-button").live("click", function(){
$(this).parent().fadeOut().remove();
return false;
});
// load another page if user click another page's link.
$("a.content-loader-link").live("click",function(){
pageLoader(this);
});
// handle with tabs
$("a.tabs").live("click", function(){
var index = $("a.tabs").index(this);
console.log(index);
return false;
});
}
});
lastCalledURL = page;
}
return false;
好的。如果我點擊頁面中的鏈接,它會調用pageLoader。如果我點擊其中一個鏈接,pageLoader會調用一次。如果我點擊另一個鏈接,pageLoader會調用兩次。如果我再次點擊另一個鏈接,第三次調用pageLoader等等。
同樣的事情發生在代碼中與「實時」功能綁定的鏈接。如果我點擊a.tabs,它將寫入控制檯twite。如果我點擊另一個.tabs鏈接,它會向控制檯寫入四次,並且每次點擊次數增加兩倍。
我不爲什麼會發生。如果您有任何想法,請告訴我。
首先解除綁定並重新綁定。謝謝。你對pageLoader部分有什麼想法嗎? – Tim
這似乎是同樣的問題?您只需點擊一次即可觸發您的事件兩次,三次和四次,這是因爲每次您進行AJAX調用時,都會附加一個「點擊」事件,而無需刪除舊事件。你用.unbind(「click」)替換了所有.live(「click」)。bind(「click」)? –
關閉和內容加載器鏈接附帶加載的內容。所以,我必須重新綁定他們的作品。 – Tim