2012-02-25 141 views
1

我有一個有序的列表,每個項目都有一個類「additem」的鏈接,用於向列表中添加另一個項目。爲了使新加入的項目添加項目環節的工作,我用.live(),像這樣:jQuery .live()問題

function pageFunctions() { 

    $('a.additem').click(function() { 

     $('<li>'+trackli+'</li>').insertAfter($(this).parent()); 

    }); 
}); 
// there are other functions that warrant 'pageFunctions' being a separate function 

$(function() { 

    pageFunctions(); 

    $('a.additem').live('click', pageFunctions); 

}); 

但是,什麼情況是,你第一次單擊添加項目鏈接,它的工作原理精細。但在此之後,而不是添加一個項目,它會加倍。第三次再翻一番。任何想法如何解決這一問題?

回答

1

問題在於,每次調用pageFunctions時,都會通過.click()調用註冊其他新的事件處理函數。試試這個:

function pageFunctions() { 

$('<li>'+trackli+'</li>').insertAfter($(this).parent()); 

}); 

$(function() { 

    pageFunctions(); 

    $('a.additem').live('click', pageFunctions); 

}); 
+0

正如.live()'被棄用的1.7 --http旁註'://api.jquery.com/live/ – kendaleiv 2012-02-25 05:38:47

0

您每次運行pageFunctions時都會將點擊事件綁定到'a.additem'。從pageFunctions函數中刪除綁定,你的問題應該消失。

0

這裏發生的事情是,當你點擊「a.additem」你要綁定每一次新的單擊事件到錨,以及創建列表元素。這意味着每次單擊錨點時,代碼將運行兩倍於上次執行的次數。

以下應該工作:

function pageFunctions() { 
    $('<li>'+trackli+'</li>').insertAfter($(this).parent()); 
}); 

$(function() {  
    $('a.additem').live('click', pageFunctions); 
});