0

マーカーのコレクションを反復処理し、カウンター変数を使用してイベントを関連付けようとしています。"When someone clicks a marker, show the infobox in position 'count'"

問題は、スクリプトが実行されると、カウント変数がすべてのクリック イベント サブスクライバー間で共有されることです。

つまり、マーカー A または B のクリックは同じ位置に配線され、同じ InfoBox を意味します。

    var popups = [];
    var count = 0;

    @foreach (var marker in Model) {
        <text>
        /* Create Markers */
        popups[count] = {};

        popups[count]["marker"] = new google.maps.Marker({
            map: themap
        });

        popups[count]["content"] = document.createElement("div");</div>';

        popups[count]["infoboxoptions"] = {
            boxClass: 'infobox-custom'
        };

        popups[count]["infobox"]= new InfoBox(popups[count]["infoboxoptions"]);            

        google.maps.event.addListener(popups[count]["marker"], "click", function (e) {
            popups[count]["infobox"].open(themap, this);
            /* PROBLEM IS HERE! ^ */
        });
        count++;
        </text>
    }

私は問題を理解していますが、それに取り組む方法がわかりません。Javascriptはクリックイベントごとに同じ変数を使用しており、反復ごとにインクリメントすると、クリックイベントごとにインクリメントされます。

助言がありますか?

4

1 に答える 1

0

これが1つの解決策です。Razorエンジンを使用して、ハードコードされたnumber値を出力しました。

var popups = [];
var count = 0;

@{ var i = 0; }
@foreach (var marker in Model) {
    <text>
    /* Create Markers */
    popups[count] = {};

    popups[count]["marker"] = new google.maps.Marker({
        map: themap
    });

    popups[count]["content"] = document.createElement("div");</div>';

    popups[count]["infoboxoptions"] = {
        boxClass: 'infobox-custom'
    };

    popups[count]["infobox"]= new InfoBox(popups[count]["infoboxoptions"]);            

    google.maps.event.addListener(popups[count]["marker"], "click", function (e) {
        popups[@i]["infobox"].open(themap, this);
    });
    count++;
    </text>
    i++;
}
于 2012-11-26T03:24:52.753 に答える