我正在尝试迭代一系列标记并使用计数器变量来连接事件。 "When someone clicks a marker, show the infobox in position 'count'"
问题在于脚本执行时,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为每个click事件使用相同的变量,并在每次迭代后递增它,也为每个click事件递增它。
有什么建议吗?
答案 0 :(得分: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++;
}