2012-11-26 59 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++; 
}