jquery – 如何让事件监听器识别新的文档元素?

前端之家收集整理的这篇文章主要介绍了jquery – 如何让事件监听器识别新的文档元素?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何让jQuery事件监听器监听通过ajax调用加载的元素?

我通过ajax将注释加载到我的文档中.每个评论都有一个ajax删除按钮.对于最初加载文档的注释,我的功能正常.

但是任何新创建的注释或通过ajax检索的注释,事件列表器都不会对它们进行检测.

< a class =“comment-delete”href =“/ comments / delete / 124”> delete< / a>

  1. $(".comment-delete").click(function(e) {
  2. e.preventDefault();
  3.  
  4. var $link = $(this),url = $link.attr('href');
  5.  
  6. $.ajax(url,{
  7. dataType: 'json',beforeSend: function() {
  8. },error: function() {
  9. },success: function(data) {
  10. if (data.success) {
  11. $($link).parent().parent().hide();
  12. }
  13. }
  14. });
  15. });

解决方法

更新的答案

今天,执行此操作的适当方法是使用带有附加选择器的on方法.例如,如果我们想听取图像上的任何点击,我们可以这样做:

  1. $("img").on("click",function () {
  2. alert( "You clicked on " + this.src );
  3. });

对于运行此代码添加到DOM的任何图像元素,这将不起作用.相反,我们需要使用事件委托,这意味着我们在冒泡阶段进一步处理DOM事件:

  1. $(document).on("click","img",function () {
  2. alert( "You clicked on " + this.src );
  3. });

在这种情况下,我们在文档级别处理事件,但前提是它所进行的元素与第二个“img”选择器匹配.因此,现在将处理任何图像,无论是最初在页面上还是在以后动态加载.

原始答案(2011年撰写)

$.live()$.delegate()是您应该关注的两种方法.第一个将监听文档以查找与您的选择器匹配的任何新元素,第二个将为它应该监听的位置提供更精细的范围.

  1. $(".comment-delete").live("click",function(){
  2. // handle delete logic
  3. });

或者,更具体:

  1. $(".comments").delegate(".comment-delete","click",function(){
  2. // handle delete logic
  3. });

猜你在找的jQuery相关文章