为什么在同一个方法里面连着写代码和将代码单独写一个方法再调用,出现的效果却不一样啊?
按道理代码还是一样的啊?

解决方案 »

  1.   

     for(var temp=0;temp<jsonstr.totalCount;temp++) {
                        arr[temp] = new Array();
                        var icon = new GIcon();
                        arr[temp][0] = jsonstr.data[temp].UserId;
                        var terminal_type=jsonstr.data[temp].DataType;
                        icon.image = "../images/map/er.png";
                        icon.shadow = null;
                        //icon.iconSize = new GSize(50, 50);
                        icon.iconAnchor = new GPoint(6, 20);
                        icon.infoWindowAnchor = new GPoint(5, 1);
                        var nowpoint = new GLatLng(jsonstr.data[temp].DataAfterLat, jsonstr.data[temp].DataAfterLng);
                        var datapostime = jsonstr.data[temp].DataPosTime;
                        var objtemp = {};
                        var un = jsonstr.data[temp].UserName+'('+datapostime.split(' ')[1]+')';
                        objtemp.labelText = un;
                        objtemp.icon = icon;
                        arr[temp][1] = new google.maps.LabelMarker(nowpoint, objtemp);
                        //arr[temp][1] = new GMarker(nowpoint, icon);
                        var er = arr[temp][1];
                        
                        //把此er添加到地图上
                        bounds.extend(nowpoint);
                        map.addOverlay(er);                    var addressinfo = '<table border="0"><tr><td style="color:#F09" width="60px" align="left" valign="top">定位地点:</td><td style="color:#F09" width="200px" align="left" valign="top">' + jsonstr.data[temp].DataPosPlace + '</br></td>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">定位时间:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataPosTime + '</td></tr>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">定位类型:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataPosType + '</td></tr>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">速度:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataSpeed + '</td></tr>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">方向:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataDirect + '</td></tr>'
                                        + '</table>';
                        //er.openInfoWindowHtml(addressinfo);
                        GEvent.addListener(er, "click", function showHtmlWindow() {
                            er.openInfoWindowHtml(addressinfo);
                        });
                    }
    这是不正确的代码
      

  2.   

    function createMarker(nowpoint, objtemp, addressinfo) {
                var er = new google.maps.LabelMarker(nowpoint, objtemp);
                GEvent.addListener(er, "click", function showHtmlWindow() {
                    er.openInfoWindowHtml(addressinfo);
                });
                return er;
            }

    for(var temp=0;temp<jsonstr.totalCount;temp++) {
                        arr[temp] = new Array();
                        var icon = new GIcon();
                        arr[temp][0] = jsonstr.data[temp].UserId;
                        var terminal_type=jsonstr.data[temp].DataType;
                        icon.image = "../images/map/er.png";
                        icon.shadow = null;
                        //icon.iconSize = new GSize(50, 50);
                        icon.iconAnchor = new GPoint(6, 20);
                        icon.infoWindowAnchor = new GPoint(5, 1);
                        var nowpoint = new GLatLng(jsonstr.data[temp].DataAfterLat, jsonstr.data[temp].DataAfterLng);
                        var datapostime = jsonstr.data[temp].DataPosTime;
                        var objtemp = {};
                        var un = jsonstr.data[temp].UserName+'('+datapostime.split(' ')[1]+')';
                        objtemp.labelText = un;
                        objtemp.icon = icon;
                        var addressinfo = '<table border="0"><tr><td style="color:#F09" width="60px" align="left" valign="top">定位地点:</td><td style="color:#F09" width="200px" align="left" valign="top">' + jsonstr.data[temp].DataPosPlace + '</br></td>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">定位时间:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataPosTime + '</td></tr>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">定位类型:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataPosType + '</td></tr>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">速度:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataSpeed + '</td></tr>'
                                                        + '</tr><tr><td style="color:#F09" align="left" valign="top">方向:</td><td style="color:#F09" align="left" valign="top">' + jsonstr.data[temp].DataDirect + '</td></tr>'
                                        + '</table>';
                        arr[temp][1] = createMarker(nowpoint, objtemp, addressinfo);
                        //arr[temp][1] = new GMarker(nowpoint, icon);
                        var er = arr[temp][1];

                        
                        //把此er添加到地图上
                        bounds.extend(nowpoint);
                        map.addOverlay(er);
                    }
    这样写就是正确的
      

  3.   

    你的第一段当然是不对的var er = arr[temp][1];//只是一个局部变量,它只是一个指向arr[temp][1]的引用在最后面,你又对添加监听事件GEvent.addListener(er, "click", function showHtmlWindow() {
    er.openInfoWindowHtml(addressinfo);本意应该是对arr[temp][1]添加click的监听事件,对操作根本不会起作用。
    所以第二段,你封装成函数,每次循环都是对arr[temp][1]进行new google.maps.LabelMarker和addListener,所以正确。
      

  4.   

    不好意思,4楼的直接无视掉吧,说错了,别误导了。
    又看了下,你试着把错误的那段代码的bounds.extend(nowpoint);
    map.addOverlay(er);放到最后面,如果还是错误的话,可能GEvent.addListener(er, "click", function showHtmlWindow() {
    er.openInfoWindowHtml(addressinfo);没有添加成功,多试着改下。