jquery每个新元素都不起作用

时间:2013-06-13 14:10:12

标签: ajax jquery twitter-bootstrap each

$('.collapse').each(function() {
  var title=  $(this).siblings('.accordion-heading').find('a');
  $(this).on('show hide', function (e) {
    if(!$(this).is(e.target))return;
    title.parent().toggleClass('active', 300);
    title.parent().hasClass('active') ? $('input.party').prop('value', '') : $('input.party').val(title.siblings('.delete').prop('id'));

    var id = title.siblings('.delete').prop('id');
    var data = {id: id};
    $.post("times.php", data, function(result) {
      if(title.parent().hasClass('active')){
        $('.times').html('');
      } else {
        $('.times').html($.parseJSON(result));
      }
    })
  })
}) 

所以我通过添加一个新的派对在我的html中添加了一个新的手风琴组,我也不想将这一切用于新添加的元素。我没有找到可以帮助我的主题,因为它比任何随机each函数更具体(我认为)。 这个未来的元素对我来说是新的,所以我很感激一些解释或一个很好的链接到我已经检查过的jquery网站的其他地方。 谢谢你的时间!

基本上我想要做的就是用$(this).on('show hide', function (e) {替换$(document).on('show hide', $(this), function (e) {。我刚刚写的内容不起作用。

2 个答案:

答案 0 :(得分:1)

这将适用于任何匹配选择器的新对象

jQuery(document).on('show hide', '.accordion-heading a', function(event){
    ...
});

答案 1 :(得分:1)

如果只是关于事件处理程序,那么您也可以使用event delegation来捕获动态创建的元素上的事件。

没有必要在这里使用.each,所以只需省略它:

$(document.body).on('show hide', '.collapse', function() {
    var title =  $(this).siblings('.accordion-heading').find('a');
    if(!$(this).is(e.target))return;
    // rest of the code...
});