javascript - 如何在动态创建元素后绑定(bind)到元素

标签 javascript jquery dom jquery-events dom-manipulation

我有这个代码:

$(".div").click(function ()
{
    alert("hi");
});

...但是当我创建新的 div 时:

$("body").append("<div>1</div>");

...然后点击这个 div,它不会说“hi”。

我知道我可以在 div 元素上执行 onclick="callfunction()",但我想避免使用该方法。

最佳答案

问题

您试图在尚不存在的元素上创建绑定(bind) - 因此无法绑定(bind)。

您使用 .div 作为选择器。选择器 .div 正在寻找具有 class="div" 的元素,而不是类型为 div 的元素。


解决方案 1 - 委派
通过委托(delegate),您可以在存在于上述结构中的元素上创建一个绑定(bind),您将在其中动态添加一个您想要监听的元素。

要使用委托(delegate),更改为:

$("body").on("click", "div", function ()
{
    alert("hi");
});

这是一个示例,显示了委托(delegate)与未委托(delegate)绑定(bind)到 future 元素上的对比:
Fiddle


解决方案 2 - 在创建时绑定(bind)到元素
另一种方法是在创建新元素时添加绑定(bind),看起来像这样:

$newEle = $("<div>1</div>").click( function() {
    alert("hi");
});
$("body").append($newEle);

Fiddle

关于javascript - 如何在动态创建元素后绑定(bind)到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274548/

相关文章:

javascript - 导航 dom javascript 特定标签

javascript - 如何动态添加带有文本框的表格行?

javascript - 使用 document.innerHTML 在 div 标签内动态生成表单

javascript - 无法使用 Angular 从 Assets 文件夹中检索 json 数据

javascript - Angular2 等待 DOM 元素加载

javascript - HTML5 Canvas 问题 |点击跟踪

javascript - 如何通过点击自动推进项目?

javascript - 使用url编码转换特殊字符(é è ë)

javascript - OOP javascript 存储功能如何

jquery - showModalDialog 简单的替代方案吗?