jQuery .live()问题

时间:2012-02-25 04:50:35

标签: jquery

我有一个有序列表,每个项目都有一个带有“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);

});

但是,当您第一次单击添加项链接时,它会正常工作。但在那之后,它不会添加一次项目,而是加倍。并且第三次再次加倍。任何想法如何解决这个问题?

3 个答案:

答案 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);
});