我可以在创建对象之前将其添加到对象中吗?

时间:2012-01-17 07:36:57

标签: jquery

我有以下动态创建的内容:

<a class="editLink" href="/location/Edit?city=05">Edit</a>

此动态和其他editLink行是动态创建的。

我想做的是为这些添加一些jQuery:

$(".editLink").button();
$(".editLink").click(function () {
    alert('edit link');
    return false;
});

有什么方法可以在元素出现之前分配它吗?另外,我该如何处理以下内容:

$(".editLink").button();

当.editLink尚未出现时。

4 个答案:

答案 0 :(得分:3)

您可以使用jQuery.live()方法收听页面上的新元素。当它添加到页面时,事件会自动添加。

答案 1 :(得分:3)

使用事件委派,将处理程序放在文档上。

$(document).on('click', '.editLink', function() {
  alert('edit link');
  return false;
});

这称为“现场”或“委派”事件。 $(document)部分标识将处理事件的元素,此代码运行时必须存在。您应该尽可能地将其设置为父元素。使用document有点过于热心,但它会起作用。

'.editLink'字符串使用处理程序标识元素内的所有子元素的选择器。当事件发生时,将针对此选择器检查原始元素,以查看匹配的事件是否触发了事件。如果是这样,那么运行事件处理程序。

请参阅此处的工作示例:http://jsfiddle.net/Squeegy/guz9A/1/

注意绑定处理程序时链接是如何存在的,但是稍后添加处理程序时它们仍会触发处理程序。

答案 2 :(得分:3)

是的,你可以deligating使用on inf使用jquery 1.7或更多其他人使用delegate进行活动。

$('body').on('click', '.editLink', function() {
  alert('edit link');
  return false;
});

而不是body,如果你知道提高性能,你可以使用任何上下文选择器(可能是父元素)

答案 3 :(得分:2)

你可以使用jquery委托 - http://api.jquery.com/delegate/