同一dom类的不同点击行为

时间:2011-10-25 13:56:41

标签: jquery

我有类似的东西:

    <div id="ajaxContentLoader">
      <a class="doSomething">do something</a>      
</div>

    $('a.doSomething').click(function(e) {
        e.preventDefault();
        doSomething(please);            
        return false;
    });

现在,奇怪的是(至少对我来说)是,如果a.doSomething是OUTSIDE ajaxContentLoader,它每次点击它都会做的事情(这很好),但是,如果是在ajaxContentLoader中,并且它被一些内容取代,然后重新使用.append();将不再工作(这很糟糕)。

怎么了?

4 个答案:

答案 0 :(得分:2)

使用live代替.click()

$('a.doSomething').live('click', function(e) {
    e.preventDefault();
    doSomething(please);            
    return false;
});

答案 1 :(得分:1)

改为使用live

$('a.doSomething').live('click', function(e) {
    e.preventDefault();
    doSomething(please);            
    return false;
});

目前你正在覆盖附加了事件处理程序的a.doSomething元素。将新元素添加到DOM时,需要重新附加事件处理程序;幸运的是,jQuery具有live()功能,可以为您完成此任务。

答案 2 :(得分:0)

您需要制作事件处理程序live

$('a.doSomething').live("click", function(e) {
    e.preventDefault();
    doSomething(please);            
    return false;
});

事件处理程序绑定到DOM元素。从DOM中删除它们时,事件处理程序不再存在。当你添加它时,它是一个新元素,并且没有事件处理程序。 live监视DOM以获取与选择器匹配的添加项,并将事件处理程序应用于那些执行者。来自jQuery文档:

  

为与当前匹配的所有元素附加事件的处理程序   选择器,现在和将来。

答案 3 :(得分:0)

你需要使用live()函数来绑定jQuery中的点击调用:

$('a.doSomething').live('click',function(e) {
        e.preventDefault();
        doSomething(please);            
        return false;
    });

.live() documentation