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