2012-11-26 61 views
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爲每個點擊事件使用相同的變量,並且在每次迭代之後遞增它也會爲每個點擊事件增加它。

有什麼建議嗎?

回答

0

這裏有一個解決方案。我使用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++; 
}