我能在对象创建之前添加事件吗?

3

我有一个动态创建的元素如下所示:

<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个回答

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

3

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

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

这被称为“实时”或“委派”的事件。 $(document) 部分标识将处理事件的元素,当代码运行时,此元素必须存在。 尽可能将其设置为父元素。 使用 document 有点过度,但它可以工作。 '.editLink' 字符串标识了处理程序内部任何子元素的选择器。 当事件发生时,将根据此选择器检查原始元素是否匹配触发了事件。 如果是,则运行事件处理程序。
在这里看到工作示例:http://jsfiddle.net/Squeegy/guz9A/1/ 请注意,链接在绑定处理程序时不存在,但稍后添加时仍会触发处理程序。

谢谢Alex。我如何处理 - $(".editLink").button(); ?是否有使用“on”的方法也可以做到这一点? - Samantha J T Star
这不是标准的jQuery方法,我不知道它是做什么的或者为什么你需要它,所以无法提供太多建议... - Alex Wayne
抱歉耽误了时间。Button 是一个 jQuery UI 的方法。 - Samantha J T Star
我不确定它的作用,但这仅适用于事件处理程序。如果此方法以某种方式将链接转换为按钮,则元素可能需要在运行时存在。在这种情况下,您将不得不在插入每个链接后调用它。 - Alex Wayne

3

如果您使用的是jQuery 1.7或更高版本,则可以通过使用on来委托事件,否则请使用delegate

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

如果您知道如何提高性能,可以使用任何上下文选择器(可能是父元素)来代替body。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接