0

我有以下代碼,它正常工作,直到我打#play按鈕。我假設這是因爲var intID設置在另一個地方,它不在同一個範圍內,當我window.clearInterval()它...我該如何解決這個問題?順便說一句,這是谷歌地圖API第3版setInterval/clearInterval它的範圍內的問題

function intervalTrigger(){ 
     return window.setInterval(function(){ 
      placement++; 
      if(placement >= markers.length){placement = 0;} 
      google.maps.event.trigger(markers[placement], "click"); 
     }, 5000); 
    }; 

    var intID = intervalTrigger(); 

    $('#map_canvas').click(function(){window.clearInterval(intID);}); 

    $('a[href=#nextmarker]').live('click',function(){ 
     placement++; 
     if(placement >= markers.length){placement = 0}; 
     google.maps.event.trigger(markers[placement], "click"); 
     window.clearInterval(intID); 
     $('a[href=#pause]').replaceWith('<a href="#play">Play</a>'); 
     return false; 
    }); 
    $('a[href=#prevmarker]').live('click',function(){ 
     placement--; 
     if(placement == -1){placement = markers.length-1} 
     google.maps.event.trigger(markers[placement], "click"); 
     window.clearInterval(intID); 
     $('a[href=#pause]').replaceWith('<a href="#play">Play</a>'); 
     return false; 
    }); 
    $('a[href=#play]').live('click',function(){ 
     $('a[href=#play]').replaceWith('<a href="#pause">Pause</a>'); 
     var intID = intervalTrigger(); 
     return false; 
    }); 
    $('a[href=#pause]').live('click',function(){ 
     window.clearInterval(intID); 
     $('a[href=#pause]').replaceWith('<a href="#play">Play</a>'); 
     return false; 
    }); 

回答

3

從您的#play單擊處理var以下幾點:

$('a[href=#play]').live('click',function(){ 
    $('a[href=#play]').replaceWith('<a href="#pause">Pause</a>'); 
    intID = intervalTrigger(); 
    return false; 
}); 

這將正確設置全局var intID的值,因此它可用於其他的事件處理程序。

1

你創建與var關鍵字變量,如果要引用變量外的範圍,你需要把它拿出來,像這樣:

$('a[href=#play]').live('click',function(){ 
    $('a[href=#play]').replaceWith('<a href="#pause">Pause</a>'); 
    intID = intervalTrigger(); 
    return false; 
}); 

否則它只是創造.live()處理程序,任何地方都不會進去了新的變​​數......不過既然你想設置你已經有了變數,請關閉var