2013-06-24 79 views
0

我試圖更新一個不使用Ajax的50頁的網站,所以很難維護,因爲每個編輯都必須在50頁上完成。劫持與JQuery的鏈接,新的鏈接沒有綁定

現在我已經擺脫了所有50頁重複的HTML,但它不工作得好:

function hijax() { 
    $("a").click(function (e) { 
    e.preventDefault(); 

    var url = this.href; 
    if (url.indexOf("index.html") != -1) { 
     $('#ajax').load("home.html", function() { 
     hijax(); 
     }); 
    } 
    else { 
     $('#ajax').load(url, function() { 
     hijax(); 
     }); 
    } 
    }); 
} 

這對於主頁工作確定,但通過Ajax加載鏈接不被劫持。看起來回調是在HTML加載之前完成的。 有什麼辦法解決這個問題?

編輯:

針對BERGI:

$('#ajax').load("home.html", function (e) { 
     hijax(); 
     }); 

傳遞event回調導致預期的原始代碼工作。喬的解決方案看起來更優雅,所以我堅持這一點。多謝你們。

+0

如果必須對多個頁面進行編輯以進行一次更改,那麼使用ajax解決這個問題不是問題。 – Bergi

+0

你打算這是遞歸嗎? – musicnothing

+0

@AlexMorrise是的,否則內聯鏈接將打開一個沒有菜單的全屏頁面。 – Jonathan

回答

5

替換:

​​

有:

$(document).on('click', 'a', function (e) { 

,並刪除function hijax() {最後}

然後刪除在ajax回調中對hijax();的引用。

這使用.on()並意味着所有當前和未來的a元素觸發事件。您的原始代碼不會將click事件綁定到新添加的鏈接。

+0

爲了進一步說明:第一個調用將一個事件處理程序綁定到每個「a」元素,因此將來的元素不會被綁定。後者調用將事件處理程序綁定到僅響應'a'元素上的事件的文檔,因此新元素仍然會將其事件吹到現有處理程序。 – cincodenada

+0

在加載ajax內容後,通過重新執行'hijax'函數,原始腳本* *綁定事件到新添加的鏈接。你沒注意到嗎? – Bergi

+0

@Bergi - 是的,我注意到了。然而,OP說這個解決方案對他們有效,所以它必須是他們約束事件的方式。 – Joe