2012-09-27 56 views
0

更新了最新的代碼:setInterval的復位按鈕上單擊

下面是最新的代碼,仍然有2個按鍵和2種功能。每個按鈕應運行釋放函數,並設置代碼在每分鐘後通過setInterval運行相同的按鈕。出於某種原因,第一個setInterval總是似乎保持設置,即使點擊第二個按鈕後應該改變它。不知道我做錯了:

$(document).ready(function() { 
    var myTimer = null; 

    get_popular(); 

    clearInterval(myTimer); 
    myTimer = null; 
    myTimer = setInterval(function() {$('a.btnPopular').click();}, 60*1000); 

    $('a.btnPopular').click(function(event) { 
     event.preventDefault(); 
     get_popular($(this)); 

     clearInterval(myTimer); 
     myTimer = null; 
     myTimer = setInterval(function() {$('a.btnPopular').click();}, 60*1000); 
    }); 

    function get_popular(that) { 
     $.ajax({ 
      url: 'get_popular.aspx?rand=' + Math.random(), 
      type: 'GET', 
      error: function(xhr, status, error) { 
       // error message here 
      }, 
      success: function(results) { 
       if (typeof that != "undefined") { 
        that.closest('.outer_div').find('.inner_div').empty().append(results); 
       } else { 
        $('.inner_div.new').empty().append(results).removeClass('new'); 
       } 
      } 
     }); 
    } 

    $('a.btnLatest').click(function(event) { 
     event.preventDefault(); 
     get_latest($(this)); 

     clearInterval(myTimer); 
     myTimer = null; 
     myTimer = setInterval(function() {$('a.btnLatest').click();}, 60*1000); 
    }); 

    function get_latest(that) { 
     $.ajax({ 
      url: 'get_latest.aspx?rand=' + Math.random(), 
      type: 'GET', 
      error: function(xhr, status, error) { 
       // error message here 
      }, 
      success: function(results) { 
       if (typeof that != "undefined") { 
        that.closest('.outer_div').find('.inner_div').empty().append(results); 
       } else { 
        $('.inner_div.new').empty().append(results).removeClass('new'); 
       } 
      } 
     }); 
    } 
}); 

回答

1

嘗試:

setInterval(function() {$('a.btnPopular').click();}, 60*1000); 

編輯: 你也不能說沒有get_popular();參數)

編輯2: 這應該解決您的問題:

var myTimer = null; 

$('a.btnPopular').click(function(event) { 
    event.preventDefault(); 
    get_popular($(this)); 
    clearTimeout(myTimer); 
    myTimer = setTimeout(function(){$('a.btnPopular').click();}, 60*1000); 
}); 

$('a.btnLatest').click(function(event) { 
    event.preventDefault(); 
    get_latest($(this)); 
    clearTimeout(myTimer); 
    myTimer = setTimeout(function(){$('a.btnLatest').click();}, 60*1000); 
}); 
+1

或者:'的setInterval( 「$( 's.btnPopular')點擊()」,60 * 1000)' –

+0

@MihaRekar,我只是嘗試這樣做,這是一個進步。但是如果我點擊第二個按鈕,會發生正確的事情,但定時器繼續執行第一個按鈕的點擊事件。爲什麼定時器不能切換? – oshirowanen

+0

這是因爲第一個時間間隔仍在運行,您必須清除它。閱讀:http://stackoverflow.com/questions/6590671/how-to-do-a-clear-interval-in-javascript –

0
setInterval(function() {$('a.btnPopular').trigger('click');}, 60*1000); 
// Ad do this 
$(elem).click(function(){}) => $(elem).on('click', function(){}); 
+0

它不值得替換click(),因爲jQuery將所有'快捷方式'事件處理程序(如click())轉換爲on(「event」,fn)。 –