2013-08-02 15 views
0

У меня есть этот список, который показывает девять сообщений на моей странице. Каждый пост имеет привязанную к нему функцию «like», так что пользователю может нравиться каждый пост и видеть количество понравившихся обновлений. Это достигается простым вызовом ajax.JQuery как функция не работает должным образом

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

Эта функция имеет один параметр, который является идентификатором последнего вставленного сообщения (iden). Он принимает все li в ul и создает список с именем $ listItems. Затем он выполняет итерацию над $ listItems, проверяет, является ли идентификатор сообщения меньше, чем последний вставленный, а затем связывает событие click с символом «как» сообщения. Функция вызывается каждый раз, когда вы нажимаете кнопку «загрузить больше».

function likenmore(iden) { 

    var $listItems = $('ul.statuses').find('li'); 
    var i = 0; 
    console.log($listItems);  
    $.each($listItems, function (index, element) { 
    var id = $(this).attr('class'); 
    if (id < iden) 
    { 
    console.log(id); 
    i++; 
    $(".likemore" + i).live("click", function(e){ 
    e.preventDefault();  
    $.ajax({ 
       type: 'POST', 
       url: 'like.php', 
       data: "id=" +id + "&num=1", 
       success: function(data) { 
      $('.hearts' + id).html(data);        
      } 
    }); 
    }); 
    } 
    }); 
}  

Существуют две проблемы с этой функцией.

  1. Когда я нажимаю нагрузку кнопки Дополнительно в первый раз, я могу, как первые восемь из девяти вновь прилагаемых сообщений, но событие щелчка не привязан к девятому и последнему. Если я делаю console.log (id), я вижу, что идентификатор последнего не печатается, событие, хотя оно находится в списке $ listItems, который я уже проверил.

  2. Когда я нажимаю кнопку загрузки больше во второй раз, все сообщения, а не только те, у которых идентификатор ниже последнего вставленного, получает связанное с ним событие click, которое создает двойную проводку, когда кнопка щелкнул. Я не понимаю, почему условие if не работает во второй раз, когда вызывается функция.

ответ

1

.live() осуждается в 1.7+ и удалены в версии 1.9 рассмотреть вопрос об использовании .on(), как это.

Делегат на ближайший статический родителя или документ для динамически добавляемых элементов

$(document).on("click",".likemore" + i, function (e) { 
+0

пытаются использовать обработчик делегата события. Как говорит Антон в комментарии выше, он устарел. Может быть, это вызывает проблему. –

+0

Привет, спасибо, что ответили. Я изменил на jQuery 1.10.2 и заменил мои живые функции на обработчик событий делегата, но проблема с exet же я все еще там. любые другие предложения? – user1009453

+0

Вы получаете какие-либо ошибки, и делаете ли вы это точно так же, как я это написал? – Anton

Смежные вопросы