Jquery .load отключает все функции - PullRequest
0 голосов
/ 26 декабря 2011

С Рождеством всех !!! У меня есть система личных сообщений на моей странице. Чтобы показать и управлять сообщениями, я использую jquery. Это файл, о котором я хочу поговорить:

<!-- get the message and show it -->
<script type="text/javascript">
$('.message').click(function() {
    var msgId = $(this).attr('id').replace('msg','');
    $.get('retrieve_msg_content.php?msgID='+msgId,function(data) {
        $('#target').html(data);
    })
// change status to read (1). type: 'POST',
$.ajax({ type: 'POST', url: 'change_status.php', data: "msgID="+msgId+"&action=read", });
});

// if img X is clicked, change status to erased(3)!
$('.delete_msg').click(function() {
    var msgId = $(this).attr('id').replace('msg','');
$.ajax({
  type: 'POST', url: 'change_status.php', data: "msgID="+msgId+"&action=delete",
  success: function(){
$('#message_line'+msgId).hide('slow');
$('#target').html('Haz click en un mensaje para leerlo!');

$('#refresh').load("retrieve_msg_received.php");
}
});
});
</script>
<!-- END of get the message and show it -->

<div id="refresh">
<?php include 'retrieve_msg_received.php'; ?>
</div>

<span id="target"></span> 

Позвольте мне объяснить сейчас. Первый раздел: когда вы нажимаете на сообщение, оно вызывает retrieve_msg_content.php, заменяет содержимое сообщения в #target, а затем меняет статус на «1» (чтение). Второй раздел - удаление сообщения: оно изменяет статус сообщения на «3», затем скрывает только что удаленное сообщение, помещает что-то приятное в #target и перезагружает список сообщений. Все работает нормально, пока вы не попытаетесь прочитать другое сообщение после того, как сообщения были перезагружены. По какой-то причине вы нажимаете на любое сообщение, но оно не отображается, и я не вижу никакой активности (нет обращений к другим файлам -retrieve_msg_content.php). Осматривая элементы, я вижу, что они похожи до и после «обновления» before refresh after refresh

перед обновлением (вверху) вы можете увидеть #target (Версия ...) после обновления внизу (тот же класс, тот же идентификатор):

Надеюсь, вы, ребята, можете помочь. Спасибо !!!

1 Ответ

1 голос
/ 26 декабря 2011

Когда вы вызываете .load(), вы заменяете существующие элементы новыми элементами, у которых нет обработчиков событий.

Вам необходимо добавить обработчики событий , используя .on() с дочерним селектором для обработки событий для всех будущих элементов, соответствующих селекторам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...