2012-09-14 25 views
1

我使用.load()填充新的內容的div,但是當我做我必須回憶我的所有腳本,以便在新內容中使用它們,我相信這是什麼導致我的事件處理程序兩次觸發。使用.load()更改divs內容時是否需要重新包含腳本?

我錯了嗎?如果沒有,還有其他方法嗎?

$('.user').click(function(){ 
    if ($section !== 'users'){ 
     $section = 'users'; 
     $('div#contentWrapper').fadeOut(0).empty(); 
     $('div#contentWrapper').load('pages/users.html').fadeIn(500); 
    } 
    else{ 
     return; 
    } 

這是代碼,這顯然是發射兩次。

$('.addUser').click(function(){   
    $('.userPanel').fadeOut(0).empty(); 
    $('.userPanel').load('pages/addUser.html').fadeIn(500); 
    }); 

我初步認爲這是淡出造成它,所以我把它設置爲即時但沒有解決問題。網站上的另一篇文章曾經建議首先解除綁定點擊處理程序,但據我所知,這是一個無法解決的問題,而id正好解決了這個問題。

我是jquery的新手,非常感謝你們提供的幫助。

回答

0

當您動態加載元素時,需要使用jQuery的.on()函數將事件綁定到加載的元素。您需要將.on()綁定到DOM中已經存在的元素,通常情況下最糟糕的情況就是body元素。如果你比body更具體,你通常會得到改善的性能。

例如,如果您加載錶行到一個表,並希望在新行的單擊事件綁定,你會使用:

$("table").on("click", "tr", function(event){ 
    //do something 
}); 
+0

所以爲了使用任何的jQuery的div中我加載到一個標準的HTML頁面,頭部已包含腳本調用我的腳本,我必須綁定每個元素,我想要做的事情?這似乎有點hinkey ... – SelfTaughtCodeMonkey

+0

爲了將任何事件綁定到動態加載的元素,您需要將它們與.on()綁定。 – j08691

+0

好的感謝您的快速回復猜我會做一些重組。 – SelfTaughtCodeMonkey

相關問題