0

次のコードがあり、#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;
    });
4

2 に答える 2

3

#play クリック ハンドラーから次の を削除しvarます。

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

これにより、グローバルの値が正しく設定さvar intIDれ、他のイベント ハンドラーで使用できるようになります。

于 2010-07-28T22:37:09.613 に答える
1

そのキーワードを使用して新しい変数を作成しています。var外側のスコープで変数を参照する場合は、次のように取り出す必要があります。

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

それ以外の場合は、そのハンドラー内に新しい変数を作成するだけで、.live()どこにも行きません...しかし、既に持っている変数を設定したいので、var.

于 2010-07-28T22:36:38.020 に答える