2012-02-25 77 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); 
});