代码之家  ›  专栏  ›  技术社区  ›  Primoz Rome

jQuery$(element)。每个函数不适用于新添加的元素

  •  17
  • Primoz Rome  · 技术社区  · 16 年前

    我正在使用.each函数通过元素列表进行迭代。我有一个匹配元素的初始列表,每个元素都非常适合这些元素。但我可以通过AJAX方法添加新元素。每个都不能处理这个新添加的元素吗?

    我知道直播事件和为新添加的元素重新绑定事件,但是,每一个都不是事件,我找不到任何关于如何正确使用它来影响新添加元素的帮助。

    //Uploadify callback where I add new items
    onComplete: function(event, queueID, fileObj, response, data)
    {
        $(".blank").remove();
        $("#lib-contentWrap").append(response); 
    }
    });

    //和我的每个循环,我循环元素。所有元素都是 包装在#lib contentWrap div.中,循环开始 如果我更改复选框的状态(=复选框选中/取消选中)! ($35k')所选函数{ 如果($(this).is(':checked')){ $(“.lib项”)。每个(函数(){ if($(this.hasClass('item-selected'))$(this.slideDown('fast'); }); } 否则{ $(“.lib项”)。每个(函数(){ if($(this.hasClass('item-selected'))$(this.slideUp('fast'); }); });

    谢谢 普利莫斯

    1 回复  |  直到 16 年前
        1
  •  12
  •   Nick Craver    16 年前

    这是因为 .each() 运行时循环匹配的元素…调用时新元素不在那里。解决方案:再次调用,但仅在添加新元素时才调用。你需要打同样的电话 .each() 在ajax结果上,使用结果的上下文来限制每个结果。

    $(".myDiv").each(function() {
     //stuff here
    });
    

    您需要在success(或complete,无论您使用什么)ajax函数中调用相同的选择器和相同的代码,如下所示:

    success: function(resp) {
      $(".myDiv", resp).each(function() { //each, but only on the new guys
       //stuff here (same as before)
      });
      //Do more stuff with your response...
    }
    

    , resp 仅在第二个参数的上下文中

    根据新问题代码进行更新

    (可选,不需要) :

    $('#chk-selected').change(function(){
        if($(this).is(':checked')) {
            $(".lib-item.item-selected").slideDown('fast');
        }
        else {
            $(".lib-item.item-selected").slideUp('fast');
        }
    });
    

    (这不会更改选择,只会触发处理程序运行) :

    onComplete: function(event, queueID, fileObj, response, data)
    {
        $(".blank").remove();
        $("#lib-contentWrap").append(response); 
        $('#chk-selected', response).trigger('change');
    }