我有一个有序列表,每个项目都有一个带有“additem”类的链接,可以将另一个项目添加到列表中。为了使新添加的项目中的添加项链接起作用,我使用.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);
});
但是,当您第一次单击添加项链接时,它会正常工作。但在那之后,它不会添加一次项目,而是加倍。并且第三次再次加倍。任何想法如何解决这个问题?
答案 0 :(得分:1)
问题是,每次调用pageFunction时,都会通过.click()调用注册其他新的事件处理程序。试试这个:
function pageFunctions() {
$('<li>'+trackli+'</li>').insertAfter($(this).parent());
});
$(function() {
pageFunctions();
$('a.additem').live('click', pageFunctions);
});
答案 1 :(得分:0)
每次运行pageFunction时,都会将点击事件绑定到'a.additem'
。从pageFunctions函数中删除绑定,你的问题就会消失。
答案 2 :(得分:0)
这里发生的是,无论何时单击“a.additem”,每次都会将新的click事件绑定到锚点,以及创建list元素。这意味着每次单击锚点时,代码将运行两次,与之前的执行次数相同。
以下内容应该有效:
function pageFunctions() {
$('<li>'+trackli+'</li>').insertAfter($(this).parent());
});
$(function() {
$('a.additem').live('click', pageFunctions);
});