当你这样做时:
$('#edit-field-project-dnr-und-0-remove-button').click(function (){
calculateDonorSum();
});
这会在当前 DOM 中搜索任何具有id="edit-field-project-dnr-und-0-remove-button"
并将事件处理程序直接附加到该 DOM 元素的元素。
如果您删除该 DOM 元素并创建一些新的 DOM 元素或添加一个新的 DOM 元素,则该新 DOM 元素将不会附加此事件处理程序,除非您运行一些新代码将事件处理程序附加到新元素。
对于动态元素,也可以使用委托事件处理,但是您还没有真正描述足够多的内容让我们知道如何推荐它。我不知道您是要添加新按钮还是更改当前按钮的 ID。
如果您要添加一个新按钮并希望此类型的所有新按钮都具有此事件处理程序,那么您可以使用委托事件处理。委托事件处理的工作方式如下:
$("some static common parent selector").on("click", "some common child selector", fn);
所以,如果你的按钮都在一个id="container"
div 中并且都有一个共同的类名class="calcButton"
,那么你可以使用:
$("#container").on("click", ".calcButton", function() {
calculateDonorSum();
});
并且,具有该类的容器中的所有按钮都将具有此事件处理程序,即使它们是在定义事件处理程序之后动态创建的。
关于委托事件处理的一些其他参考:
jQuery .live() 与 .on() 方法在加载动态 html 后添加点击事件
jQuery.on() 是否适用于在创建事件处理程序后添加的元素?
所有 jquery 事件都应该绑定到 $(document) 吗?
JQuery 事件处理程序 - 什么是“最佳”方法