JQuery:将事件绑定到动态创建的元素的最佳方法

时间:2017-08-31 17:49:43

标签: javascript jquery performance

请考虑以下事项:

var template = '<div class="dynamic">Some markup</div>'
  , $template = $(template);
$template.on('click.namespace.data-api', function(e) { doStuff() });
$('div.#parent').append($template);

对我来说,这似乎是将事件绑定到节点的最佳方式,因为事件附加到已经作为jQuery对象引入的节点。但是,我不确定这在实际点击事件中是如何发挥作用的;点击,是jQuery能够立即找到这个元素,因为事件绑定到jQuery对象?或者使用类似以下内容绑定事件更为理想:

var template = '<div class="dynamic">Some markup</div>'
  , $template = $(template);
$('div.#parent').append($template);
$('div.#parent').on('click.namespace.data-api', 'div.dynamic', function(e) { doStuff() });

2 个答案:

答案 0 :(得分:2)

JQuery对象只存在于它们所处的确切调用中。一旦完成该调用,该对象就不再与JQuery对象相关联。

当您使用点击委派显示时,您不必担心随时创建的元素的动态方面,因为处理程序挂钩到父节点,然后监视对委托元素/类的单击。 / p>

使用直接委派方法向我编写第二版点击授权更容易阅读,并且当您将来再次阅读时更清楚。

答案 1 :(得分:-1)

您可以将其绑定到文档,而不是将事件绑定到特定元素。

`$('.dynamic').click()` can be replaced with `$(document).on('click', '.dynamic', function())`