Подтвердить что ты не робот

Привязка jQuery Нажмите ссылку после вызова AJAX

Я в ярости - возможно, кто-то сможет мне помочь.

Мне нужно перевязать клик по ссылке после вызова AJAX, но по какой-то причине он не хочет работать.

Здесь мой код:

if ($('.active').length > 0) {
    $('.active').click(function() {
        var elem = $(this);
        var url = $(this).attr('href');
        $.ajax({
            url: url,
            dataType: 'html',
            success: function(data) {
                elem.replaceWith(data);                                                     
            }       
        });         
        $('.active').bind('click'); return false;           
    });
}

Любая идея?

Спасибо за ответы - я внесла поправки в код, но проблема все еще существует:

function makeActive() {
    if ($('.active').length > 0) {
        $('.active').click(function() {
            var elem = $(this);
            var url = $(this).attr('href');
            $.ajax({
                url: url,
                dataType: 'html',
                success: function(data) {
                    elem.replaceWith(data);                             
                }       
            }); 
            $('.active').live('click', makeActive);     
            return false;           
        });
    }
}


$('.active').live('click', makeActive);
4b9b3361

Ответ 1

Вам нужно будет добавить переупорядочение в обработчике success, если вы хотите выполнить его после вызова Ajax:

success: function(data) {
    elem.replaceWith(data);
    $('.active').bind('click', /* some function needs to go here*/);
}

В этом случае live() или delegate(), вероятно, лучшие варианты [ update: теперь, когда jQuery 1.7 отсутствует, все можно сделать с помощью .on()]. Это также предотвратит двойное назначение обработчиков кликов, если у вас есть другие .active ссылки, которые не были заменены.

Обновление: Что касается вашего обновленного кода: способ использования live побеждает его цель. Пожалуйста, прочитайте его документацию. То, что вы делаете, - это назначить обработчик кликов при щелчке ссылки, что означает, что вы добавляете обработчики кликов снова и снова.

Это улучшенная версия вашего кода.

$('.active').live('click', function(event) {
    var elem = $(this);
    var url = $(this).attr('href');
     $.ajax({
         url: url,
         dataType: 'html',
         success: function(data) {
              elem.replaceWith(data);                             
         }       
     });    
     event.preventDefault();
     event.stopPropagation();
});

Ответ 2

ОБНОВЛЕНИЕ 31 октября 2012 г.

Начиная с jQuery 1.7, рекомендуется использовать on -

$(document).on('click', '.active', function () {
    // click handler code goes here
});

Можете ли вы попробовать следующее?

$('.active').live('click', function()
{
    // click handler
});