setInterval / clearInterval在其范围内发出问题

时间:2010-07-28 22:34:06

标签: javascript jquery google-maps anonymous-function setinterval

我有以下代码,它工作正常,直到我点击#play按钮。我假设它是因为var intID设置在另一个地方,并且当我window.clearInterval()它时它不在同一范围内...我该如何解决这个问题?顺便说一句,这是谷歌地图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 个答案:

答案 0 :(得分: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 :(得分:1)

您正在使用var关键字创建 new 变量,如果您想引用外部范围中的变量,则需要将其取出,如下所示:

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

否则它只是在.live()处理程序中创建一个新的变量,它不会去任何地方......但是因为你想设置你已经拥有的变量,所以不要使用var