sanek_os9
@sanek_os9
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux

Как удалить только что добавленное сообщение?

Здравствуйте, у меня реализовано добавление и удаление сообщений через AJAX, после добавления сообщения идет ajax запрос на сервер и результат помещается в некий div, проблем с этим нет, проблема лишь в том что с этого div'а сообщения не удаляются хотя разница в разметке лишь в том что сообщения выводятся

<div class="message">
<a href="#" class="delete-post" data-id="{$post['id']}">
    <span class="glyphicon glyphicon-remove action"></span>
</a>
    <!-- разный html код -->
</div>
а новоприбывшее сообщение
<div id="new-message">
<div class="message">
<a href="#" class="delete-post" data-id="{$post['id']}">
    <span class="glyphicon glyphicon-remove action"></span>
</a>
    <!-- разный html код -->
</div>
</div>
А JS код для удаления вот
<script type="text/javascript">
        $(document).ready(function(){
            $('.delete-post').click(function(){
                var id = $(this).attr('data-id');
                $.post('/posts/' + id + '/delete', {}, function(data){
                    $('#notice').html(data);
                });
                return false;
            });
</script>

На новом сообщении $('.delete-post').click(); не хочет вообще работать
  • Вопрос задан
  • 120 просмотров
Решения вопроса 2
@link_irk
Дело в том, что обработчик click навешивается на элементы, уже существующие в DOM. Если вы в DOM динамически добавляете элемент, то обработчик click в нём работать не будет. Используйте делегирование. api.jquery.com/on
Ответ написан
sanek_os9
@sanek_os9 Автор вопроса
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
Проблему решил следующим образом, все сообщения поместил в общий div
<div id="listing-post">
<div id="new-message">
<div class="message">
<a href="#" class="delete-post">
   <span data-action="{$post['id']}" class="glyphicon glyphicon-remove action remove-action"></span>
</a>
    <!-- разный html код -->
</div>
</div>
</div>
А JS приобрел такой вид:
<script type="text/javascript">
        var container = document.getElementById('listing-post');
        container.onclick = function(event) {
            var id = event.target.getAttribute('data-action');
            if (!event.target.classList.contains('remove-action')) return;
            event.target.parentNode.hidden = !event.target.parentNode.hidden;
            
            $.post('/posts/' + id + '/delete', {}, function(data){
                $('#notice').html(data);
            });
            return false;
        }
</script>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы