0

У меня есть следующий код, и он отлично работает, пока я не нажму кнопку #play. Я предполагаю, что это потому, что var intID установлен в другом месте, и он не в той же области, когда я window.clearInterval() это ... как я могу это исправить? Кстати, это API версия Google Maps 3setInterval/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

Удалите var из обработчика #play мыши к следующему:

$('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.

Смежные вопросы