【问题标题】:Javascript loop; getting the current variableJavascript循环;获取当前变量
【发布时间】:2011-02-24 19:58:41
【问题描述】:

我正在尝试用shiftzoom.js制作地图

我有以下代码sn-p:

function selectall() {
    for (i in geodata['world']) {
        var q = getGeoPosition('world', i.toUpperCase(), 1654, 496, 1350, 407);
        shiftzoom.construct($('world'), [{
            x: q.l,
            y: q.t,
            w: 40,
            h: 40,
            id: geodata['world'][i].lc,
            pos: 0,
            title: '',
            href: "javascript:get_lake(i); ",
            target: 'graphFrame',
            src: 'images/bullet.gif'
        }]);
        cvi_tip.add(cvi_tip.$(geodata['world'][i].lc), '<small>Province:</small><br/><big><b><u>' + geodata['world'][i].ln + '</u></b></big><br/><small>LAT/LONG:</small><br/><big><b>' + geodata['world'][i].coord + '</b></big><br/><small>PROVINCE:</small><br/><big><b><i>' + geodata['world'][i].pr + '</i></b></big>');
    }
}

我正在定位点以表示地图上的湖泊,并且我希望在单击该点时将其放大。这就是函数 get_lake 所做的,但我单击的每个点都会放大到“i”的最后一个值。我试过像这样使用闭包:

 href:"javascript:function(num){return function(){get_lake(num);};}(i);"

但我可能没有正确使用它,因为这段代码没有运行。有谁知道如何编写代码以便函数调用当前变量而不是最后一个变量?

谢谢

【问题讨论】:

  • href 代码在您单击链接之前不会被评估。到那时,变量i 将具有完全不同的值——如果它在那种情况下完全可用的话……要学的东西太多了,年轻的学徒……:-D
  • 这个问题有解决办法吗?

标签: javascript variables loops closures


【解决方案1】:

说实话,我不熟悉您使用的库,而且我发现您发布的代码绝对是一团糟!缩进对可读性有很大帮助。不管怎样,试试这个:

href:"javascript:get_lake("+i+"); ",

闭包在这里不起作用,因为您没有在那里创建函数:您正在创建一个字符串。因此,将i 的值连接到字符串中。

【讨论】:

  • 我尝试将其放入我的代码中,但我的代码无法运行。抱歉代码乱七八糟。还有其他解决方法吗?
【解决方案2】:

从您的代码中我不清楚要更改什么,但这个答案可能会有所帮助:

JavaScript closure inside loops – simple practical example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2020-11-23
    • 2013-09-06
    • 2023-01-23
    • 2019-05-07
    相关资源
    最近更新 更多