setInterval / clearInterval Проблема внутри области действия - PullRequest
0 голосов
/ 29 июля 2010

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

  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;
    });

Ответы [ 2 ]

3 голосов
/ 29 июля 2010

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

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

Это правильно установит значение глобального var intID, чтобы оно было доступно для других обработчиков событий.

1 голос
/ 29 июля 2010

Вы создаете новую переменную с этим ключевым словом var, если вы хотите сослаться на переменную во внешней области видимости, вам нужно вынуть ее, например:

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

В противном случае это просто создание новой переменной внутри этого обработчика .live(), который никуда не денется ... но так как вы хотите установить переменную, которая у вас уже есть, пропустите var.

...