gpt4 book ai didi

Javascript变量问题,简单的问题

转载 作者:行者123 更新时间:2023-11-28 16:40:10 24 4
gpt4 key购买 nike

var num = rez.data.length;

for(var key=0;key<num;key++)
{
var marker = [];
var point = new GLatLng(rez.data[key].latitude, rez.data[key].longitude);
marker[key] = new GMarker(point, {icon: iconS});
GEvent.addListener(marker[key], "click", function()
{
marker[key].openInfoWindowHtml('xxxxxx');
});
map.getMap().addOverlay(marker[key]);
}

我在这里需要帮助,谁能告诉我为什么 marker[key].openInfoWindowHtml('xxxxxx'); 行中的 marker[key] 未定义?我在这里定义它:marker[key] = new GMarker(point, {icon: iconS});

最佳答案

除了其他答案所表明的内容之外,您还有另一个问题。

您的 key 变量的作用域位于内部事件处理函数之外。发生的情况是,每次递增 key 时,您都会更改将在事件处理程序中使用的值。

实际上,假设 num 等于 10。所有点击事件处理程序最终都会调用以下代码:

function() {
marker[10].openInfoWindowHtml('xxxxxx');
}

解决此问题的一种方法是将循环内容限制在另一个函数内并立即调用它:

var num = rez.data.length;
var marker = [];
for(var key=0;key<num;key++)
{
var point = new GLatLng(rez.data[key].latitude, rez.data[key].longitude);
marker[key] = new GMarker(point, {icon: iconS});
function(key) {
GEvent.addListener(marker[key], "click", function() {
marker[key].openInfoWindowHtml('xxxxxx');
});
}(key);
map.getMap().addOverlay(marker[key]);
}

编辑:澄清。我所做的是声明一个匿名函数,并立即调用它。另一种更清楚地了解正在发生的事情的方法是,

function(key) {
GEvent.addListener(marker[key], "click", function() {
marker[key].openInfoWindowHtml('xxxxxx');
});
}(key);

可以替换为:

function temp(key) {
GEvent.addListener(marker[key], "click", function() {
marker[key].openInfoWindowHtml('xxxxxx');
});
};

temp(key);

即,首先声明一个名为 temp 的临时函数,然后在后面的行调用它。

关于Javascript变量问题,简单的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com