【问题标题】:Getting value of "i" from GEvent从 GEvent 获取“i”的值
【发布时间】:2011-01-27 06:04:10
【问题描述】:

我正在尝试在按下地图上的每个图标时为其添加一个事件侦听器。我将信息存储在数据库中,我想要检索的值是“i”但是当我输出“i”时,我得到它的最后一个值,即 5(地图上绘制了 6 个对象)

下面是代码,获取 i 值的最佳方法是什么,而不是对象本身。

var drawLotLoc = function(id) {

    var lotLoc = new GIcon(G_DEFAULT_ICON);             // create icon object
    lotLoc.image = url+"images/markers/lotLocation.gif";     // set the icon image
    lotLoc.shadow = "";                                 // no shadow
    lotLoc.iconSize = new GSize(24, 24);                // set the size
    var markerOptions = { icon: lotLoc };               

    $.post(opts.postScript, {action: 'drawlotLoc', id: id}, function(data) {

        var markers = new Array();
        // lotLoc[x].description
        // lotLoc[x].lat
        // lotLoc[x].lng
        // lotLoc[x].nighbourhood
        // lotLoc[x].lot
        var lotLoc = $.evalJSON(data);

        for(var i=0; i<lotLoc.length; i++) {
            var spLat = parseFloat(lotLoc[i].lat);
            var spLng = parseFloat(lotLoc[i].lng);

            var latlng = new GLatLng(spLat, spLng)
            markers[i] = new GMarker(latlng, markerOptions);

            myMap.addOverlay(markers[i]);

            GEvent.addListener(markers[i], "click", function() {
                console.log(i);     // returning 5 in all cases. 
                                    // I _need_ this to be unique to the object being clicked.
                console.log(this);
            });
        }
    });

【问题讨论】:

    标签: javascript jquery geocode gevent


    【解决方案1】:

    您对闭包有疑问。你的函数看到i的最后一个值。只需添加另一个闭包即可修复您的错误:

    for(var i=0; i<lotLoc.length; i++) {
        (function(i){
            // ...
        })(i); //run the function with i as argument
    }//for
    

    【讨论】:

      猜你喜欢
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多