2010-10-24 1 views
0

Я пытаюсь сделать «больше» после 10 сообщений в новостях.jQuery: проблема с добавленными текстами

К этим темам новостей есть некоторые функции, вы можете щелкнуть комментарий, затем появится и вы прокомментируете, не перейдя на другую страницу (вызов AJAX) и некоторые другие, подобные этому. Это отлично работает на первых 10 постах.

Теперь, когда вы нажимаете «Еще» в нижней части этих 10 тем новостей, вы получите еще 10. Здесь используется вызов Ajax, и он добавляется после 10 первых. Это прекрасно работает.

Но что не работает (мой вопрос заключается в том, что те, на функциях клик у меня есть:

$('.reply').click(function() { 
    $('#replyWall'+$(this).attr('data-id')).toggle(); 
    document.getElementById('replyMsg'+$(this).attr('data-id')).focus(); 
}); 

$('.writeSComment').click(function() { 
    $(this).hide(); 
    $('#replyToSComment'+$(this).attr('data-id')).toggle(); 
    document.getElementById('commentStatus'+$(this).attr('data-id')).focus(); 
}); 

не работает Может быть это потому, что прилагается приходит после загрузки сайта, потому что вы первый. нажмите «Больше», чтобы он не смог найти какой-либо идентификатор, чтобы это событие нажало.

Но на этом прилагаемом есть эти идентификаторы и все, так что есть ли способ получить эти функции работа с прилагаемыми материалами или как это сделать?

$('.more').live("click",function() { 
    var ID = $(this).attr("id"); 
    if(ID) { 
     $("#more"+ID).html('<img src="moreajax.gif" />'); 
     $.ajax({ 
      type: "POST", 
      url:  "misc/moreactivities.php", 
      data: "lastmsg="+ ID, 
      cache: false, 
      success: function(html) { 
       $("#profileWall").append(html); 
       $("#more"+ID).remove(); 
      } 
     }); 
    } 
}); 
+2

Там нет кода здесь, который делает любую эту директиву. Почему вы смешиваете jQuery с getElementById? –

+0

Извините обновленный вопрос. – Johnson

ответ

1

При привязке события к набору выбранных элементов, вы только влияя на элементы, которые в настоящее время существуют в DOM. Это то, что вы делаете с .click, который является псевдонимом для .bind('click', function() { ... });.

Чтобы связать события для всех элементов и вновь созданных элементов, которые соответствуют селектору, вам нужно использовать .live:

$('.reply').live('click', function() { 
    // ... 
}); 
0

Почему вы используете встроенные функции JS внутри jQuery?

document.getElementById('commentStatus'+$(this).attr('data-id')).focus(); 

Кроме того, если вы создаете элементы «на воздухе» использовать в прямом эфире, чтобы прикрепить события

$('.writeSComment').click(function() { 

в

$('.writeSComment').live("click", function() { 

Это будет влиять на каждый элемент, не имеет значения, если это было загружается с помощью dom или позже.

// К сожалению, я до сих пор пишу, когда плакат отредактировал