Сброс функции setInterval с помощью jquery - PullRequest
1 голос
/ 24 декабря 2011

Вот мой код:

$(document).ready(function() {
    $('#mid_select').live('click', function(e){ 
        $('#middle').load( $(this).attr('href') + ' #middle');
        var page =  $(this).attr("rel");
        alert(page);
        if (page == 'mywall'){
            var auto_refresh = setInterval(function () {
            $('#bottom_middle').load('includes/main_middle_div.php?view=mywall #bottom_middle').fadeIn("slow");}, 5000); 
        } else {
            clearInterval(auto_refresh);     
        }
        e.preventDefault(); 
    }); 
});

Что я пытаюсь сделать, если пользователь нажимает на ссылку с идентификатором #mid_select и атрибутом rel, равным «mywall»затем обновляйте #bottom_middle div каждые 5 секунд, но если пользователь щелкает ссылку, где атрибут rel не равен «mypage», то не обновляйте #bottom_middle div каждые 5 секунд.Не удалось выяснить, как это сделать, помочь кому-нибудь?

1 Ответ

2 голосов
/ 24 декабря 2011

Вы должны сохранить ссылку на setInterval s timeout вне обработчика щелчка (используя var).Кроме того, вы должны убедиться, что максимальный интервал один зацикливается за один раз.Скорректированный код, как показано ниже, соответствует следующим критериям:

$(document).ready(function() {
    var auto_refresh = false;   // Store this variable OUTSIDE the click handler
    $('#mid_select').live('click', function(e){
        var $this = $(this);
        $('#middle').load( $this.attr('href') + ' #middle');
        var page =  $this.attr("rel");
        alert(page);
        if (page == 'mywall'){
            // Check whether an instance is already running...
            if (auto_refresh === false) {
                // NO var, because we use the auto_refresh var in the parent scope
                auto_refresh = setInterval(function () {
            $('#bottom_middle').load('includes/main_middle_div.php?view=mywall #bottom_middle').fadeIn("slow");
                }, 5000); 
        } else {
            // Clear interval, and explicitly set it to true
            clearInterval(auto_refresh);
            auto_refresh = false;
        }
        e.preventDefault(); 
    }); 
});
...