我有类似的东西:
<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();将不再工作(这很糟糕)。
怎么了?答案 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;
});