0

我有这段代码可以用另一个按钮替换一个按钮:

("#addEntry").replaceWith($('<button class="btn default add-entry" id="update">Update</button>'));

Chrome 开发者工具显示这样的按钮已创建。但是,当我想添加一个事件处理程序时,它就不起作用了!

$("#update").on("click", updateEntry);

function updateEntry () {
    alert("started");
};

谁能解释我做错了什么?提前致谢

4

5 回答 5

1

这应该有效:

$(document).on("click", "#update", updateEntry);
于 2013-11-07T11:40:51.527 回答
1

由于按钮是动态添加的,所以需要使用event delegation注册事件处理程序

// New way (jQuery 1.7+) - .on(events, selector, handler)
$(document).on('click', '#update', updateEntry);

如果可能,将document此处替换为最近的静态父元素IDclass,假设containerID。然后代码将如下所示:

$('#container').on('click', '#update', updateEntry);

这会将您的事件附加到#container元素中的任何按钮,从而减少检查整个document元素树的范围并提高效率。

于 2013-11-07T11:41:37.007 回答
0

您必须使用委托:

$(document).on("click", "#update", updateEntry);

看看Direct 和委派事件

于 2013-11-07T11:41:02.237 回答
0

尝试

$("body").on("click","#update", updateEntry);
于 2013-11-07T11:41:04.493 回答
0

使用类而不是 ID,否则页面中有多个 Id。也试试这个方法。

$("body").on("click",".update", updateEntry);

function updateEntry () {
    alert("started");
};

注意:(.update)在类的情况下

于 2013-11-07T11:41:16.180 回答