2013-05-11 28 views
1

我有追加一些HTML表格内的区段使用此代码段一个按钮被点击时的函数:为什么JQuery不能'查找'附加的div?

function add_series() { 
    $(document).on("click", "a.add-another-series", function(e) { 
     e.preventDefault(); 

     // Get the containing div that we will append the retrieved HTML to 
     $container = $(this).parent().parent().parent().parent(); 

     // Get the HTML via ajax and append it to the containing div 
     $.get('ajax/add-series/' + study_number + '/' + series_number, function(data){ 
      $container.append(data); 
     }); 
    }); 
} 

这里是经由返回到调用函数中的(切断)HTML结构AJAX(CAPS表示该文本是一个变量):

<div class="series" data-study-number="STUDY_NUMBER" data-series-number="SERIES_NUMBER">   
    <h4>series SERIES_NUMBER</h4> 

    <div class="row"> 
     <div id="RANDOM_ID" class="small-12 columns large-centered uploader">&nbsp;</div> 
    </div>       
</div> 

这工作正常,并显示在页面上的预期。

我需要做的是从第一个函数(本问题开始处的“点击”一个函数)中获取id = RANDOM_ID的div。为了测试,我试图抓住所有的.series的div有以下选择:

$series_divs = $('.study[data-study-number="' + STUDY_NUMBER + '"]').find('.content').find('.series'); 

这似乎只返回.append()调用之前存在的.series的div。它不会返回我刚添加的那个。我在这里做错了什么?

+0

'STUDY_NUMBER'对'.study'分类的div是否相同? – Kiruse 2013-05-11 09:57:06

+0

你可以尝试使用$ series_divs = $('。study [data-study-number =''+ STUDY_NUMBER +'“]')。find('。content .series'); – 2013-05-11 10:16:27

+0

如果您粘贴小提琴我们可以帮助您更好。很多信息都丢失了,而且这个设置很难实现。它似乎也表明,每次添加一个系列时,您都会将一个新的监听器添加到文档中,所以它会反复运行多次,而您点击的次数越多。 (我不认为这就是你想要的) – Shanimal 2013-05-11 10:45:22

回答

1

尝试这样:

$(document).on("click", "a.add-another-series", function(e) { 
    var $container = $(this).parent().parent().parent().parent(); 

    e.preventDefault(); 

    $.get('ajax/add-series/' + study_number + '/' + series_number) 
    .then(function(data){ 
     var $data = $(data), 
      id = $data.find(".row div").attr("id"); 

     $container.append($data); 

     // Now something with id. Maybe call a function with it? 
    }); 
}); 

  • 什么function add_series()的目的是什么?在包含事件处理程序的函数中没有太多用处,所以我已经删除它。
  • 您忘记了var您的变量。请使用.closest()
  • 您不需要链接您的.find()调用。 .find('.content').find('.series')相当于find('.content .series')
  • study_numberseries_number哪里来的?
+0

在get函数中抓取id效果很好。我是JQuery的新手,并删除了包含事件处理函数的函数(它仍然按预期工作)。我用你的建议替换了多个.parent()和.find()调用,因为它们也可以很好地工作。谢谢。 – Garry 2013-05-11 14:24:44

+0

完成时,study_number和series_number是脚本中更高的预先声明的变量 – Garry 2013-05-11 14:25:12

+0

作为一般规则:您应该尽可能避免出现全局状态。这就是为什么使用'var'非常重要的原因。每个在没有'var'的情况下声明的变量是全局的,独立于*声明的地方(尝试它)。 – Tomalak 2013-05-11 14:40:46