解决方案 »

  1.   

    for没有作用域改法:(function(i){s[i].addEventListener("click",function(e){
                                    //测试
            alert("i = " + i);
    // 当鼠标点击这个标示的时候,标示的颜色
                                    //添加覆盖物
    map.addOverlay(4);
                                    //删除覆盖物
    map.removeOverlay(2);
    map.removeOverlay(6);
    map.removeOverlay(point2);
    map.removeOverlay(point4);
    map.removeOverlay(point6);
    map.removeOverlay(point8);
    map.removeOverlay(point10);
    map.removeOverlay(point12);
    // 打开文件提示
    showInfo(map);
    });})(i);ps:发代码的时候注意格式弄好点
      

  2.   

    那个代码格式是这个论坛过滤了我的格式,我的代码格式好好的,发上去就乱了!!!!你这个(function(i){})(i);如何应用,能否放到一个JS函数function aaa(){}里面应用啊???而且,我试过了你这个(function(i){})(i);根本就没有对i进行i++的操作啊,还是应该写成(function(i){})(i++);,如何利用这种办法,实现for(var n=0;n<s.length;i++){}这个操作呢???如果把这个(function(i){})(i);放在一个JS函数外边,我真不知道怎么来调用了!!!我对JQuery的函数调用,不太熟悉,你知道吗,还有我在函数function addMapOverly(map){}里面定义的s数据,如何将数据的长度传入函数(function(i){})(i);当中呢???下面是我利用你写的这个函数,重新改了我的例子,但是整个地图都没有实现初始化,地图里面是空的!!!请问,我这个例子应该如何修改???//创建Mark标示
    function addMapOverly(map){
    // 定义标示图片
    var icon1 = new BMap.Icon("image/标示1.jpg",new BMap.Size(128,128));
    var icon2 = new BMap.Icon("image/标示2.jpg",new BMap.Size(128,128));
    var icon3 = new BMap.Icon("image/标示3.jpg",new BMap.Size(128,128));
    var icon4 = new BMap.Icon("image/标示4.jpg",new BMap.Size(128,128));// 设置标示
    var 1 = new BMap.Marker(new BMap.Point(116.41433,39.889031),{icon:icon1});
    var 2 = new BMap.Marker(new BMap.Point(116.41433,39.889031),{icon:icon2});var 3 = new BMap.Marker(new BMap.Point(116.303371,39.858021),{icon:icon1});
    var 4 = new BMap.Marker(new BMap.Point(116.303371,39.858021),{icon:icon2});var 5 = new BMap.Marker(new BMap.Point(116.44092,39.899991),{icon:icon1});
    var 6 = new BMap.Marker(new BMap.Point(116.44092,39.899991),{icon:icon2});var point1 = new BMap.Marker(new BMap.Point(116.409156,39.968263),{icon:icon3});
    var point2 = new BMap.Marker(new BMap.Point(116.409156,39.968263),{icon:icon4});var point3 = new BMap.Marker(new BMap.Point(116.330967,39.960742),{icon:icon3});
    var point4 = new BMap.Marker(new BMap.Point(116.330967,39.960742),{icon:icon4});var point5 = new BMap.Marker(new BMap.Point(116.450549,39.927994),{icon:icon3});
    var point6 = new BMap.Marker(new BMap.Point(116.450549,39.927994),{icon:icon4});var point7 = new BMap.Marker(new BMap.Point(116.422379,39.92224),{icon:icon3});
    var point8 = new BMap.Marker(new BMap.Point(116.422379,39.92224),{icon:icon4});var point9 = new BMap.Marker(new BMap.Point(116.383859,39.924896),{icon:icon3});
    var point10 = new BMap.Marker(new BMap.Point(116.383859,39.924896),{icon:icon4});var point11 = new BMap.Marker(new BMap.Point(116.411311,39.942932),{icon:icon3});
    var point12 = new BMap.Marker(new BMap.Point(116.411311,39.942932),{icon:icon4});        //将这些标示连接成数组进行操作
    var s = [1,2,3,4,5,6,point1,point2,point3,point4,point5,point6,point7,point8,point9,point10,point11,point12];               $(function(i){
    map.addOverlay(s[i]);
    var Index = s[i];
    s[i].addEventListener("click",function(e){
    for(var n=0;n<s.length;i++){
    if(n == i){
    alert("i = " + i);
    // 当鼠标点击这个标示的时候,蓝色标示变为红色标示
    map.addOverlay(changMark[i]);
    }else{
                                                    // 将没有点击的标示,所覆盖的红色标示删除掉
    map.removeOverlay([n]);
    }
    }
    });
    })(i);
    }
      

  3.   

    (function(i){})(i);就是给你在for循环中使用,解决for循环无作用域的问题用法:for(var i=0;i<xxx;i++) {
        (function(i){
            //你的代码
        })(i);
    }
    这样i就可以受作用域保护,循环后function内部的i仍保持循环时的值
      

  4.   

    (function(i){})(i);就是给你在for循环中使用,解决for循环无作用域的问题用法:for(var i=0;i<xxx;i++) {
        (function(i){
            //你的代码
        })(i);
    }
    这样i就可以受作用域保护,循环后function内部的i仍保持循环时的值谢谢你的回答了,你的回答,对我帮助很大!!!我还有一个问题,就是自定义坐标标示覆盖物,在放大和缩小地图的时候,坐标位置总是改变,这个你有办法解决吗???这些是坐标标示覆盖物的效果:以下是我的这个效果的JS代码,不知道如何固定坐标啊,在放大和做小地图的时候,标示的坐标位置总是在变var map = new BMap.Map("allmap");
    var point = new BMap.Point(105.955754,36.525109);
    map.centerAndZoom(point,8);
    map.enableScrollWheelZoom();//创建Mark标示
    for(var i=0;i<s.length;i++){
    // 将此标示放入地图
    map.addOverlay(s[i]);
    //var Index = s[i];
    (function(i){
    s[i].addEventListener("click",function(e){
    for(var j=0;j<s.length;j++){
    if(j == i){
    //alert("i = " + i);
    var n = j+1;
    doClick(n);
    // 当鼠标点击这个标示的时候,标示的颜色改
    map.addOverlay(changeMarks[j]);
    }else{
    map.removeOverlay(changeMarks[j]);
    }
    }
    });
    })(i);
    }
      

  5.   

    以下是我的这个效果的全部JS代码,不知道如何固定坐标啊,在放大和做小地图的时候,标示的坐标位置总是在变var map = new BMap.Map("allmap");
    var point = new BMap.Point(105.955754,36.525109);
    map.centerAndZoom(point,8);
    map.enableScrollWheelZoom();
    //获得原标示数组
    // 定义标示图片
    var icon1 = new BMap.Icon("image/标示1.jpg",new BMap.Size(128,128));
    var icon2 = new BMap.Icon("image/标示3.jpg",new BMap.Size(128,128));
    // 设置标示
    var 1 = new BMap.Marker(new BMap.Point(116.41433,39.889031),{icon:icon1});
    var 2 = new BMap.Marker(new BMap.Point(116.303371,39.858021),{icon:icon1});
    var 3 = new BMap.Marker(new BMap.Point(116.44092,39.899991),{icon:icon1});
    var 4 = new BMap.Marker(new BMap.Point(116.409156,39.968263),{icon:icon2});
    var 5 = new BMap.Marker(new BMap.Point(116.330967,39.960742),{icon:icon2});
    var 6 = new BMap.Marker(new BMap.Point(116.450549,39.927994),{icon:icon2});
    var 7 = new BMap.Marker(new BMap.Point(116.422379,39.92224),{icon:icon2});
    var 8 = new BMap.Marker(new BMap.Point(116.383859,39.924896),{icon:icon2});
    var 9 = new BMap.Marker(new BMap.Point(106.258806,38.289461),{icon:icon2});
    var s = [1,2,3,4,5,6,7,8,9];//获得点击后的标示数组{
    // 定义标示图片
    var changeIcon1 = new BMap.Icon("image/标示2.jpg",new BMap.Size(128,128));
    var changeIcon2 = new BMap.Icon("image/标示4.jpg",new BMap.Size(128,128));
    // 设置标示
    var changeMark1 = new BMap.Marker(new BMap.Point(116.41433,39.889031),{icon:changeIcon1});
    var changeMark2 = new BMap.Marker(new BMap.Point(116.303371,39.858021),{icon:changeIcon1});
    var changeMark3 = new BMap.Marker(new BMap.Point(116.44092,39.899991),{icon:changeIcon1});
    var changeMark4 = new BMap.Marker(new BMap.Point(116.409156,39.968263),{icon:changeIcon2});
    var changeMark5 = new BMap.Marker(new BMap.Point(116.330967,39.960742),{icon:changeIcon2});
    var changeMark6 = new BMap.Marker(new BMap.Point(116.450549,39.927994),{icon:changeIcon2});
    var changeMark7 = new BMap.Marker(new BMap.Point(116.422379,39.92224),{icon:changeIcon2});
    var changeMark8 = new BMap.Marker(new BMap.Point(116.383859,39.924896),{icon:changeIcon2});
    var changeMark9 = new BMap.Marker(new BMap.Point(116.411311,39.942932),{icon:changeIcon2});
    var changeMarks = [changeMark1,changeMark2,changeMark3,changeMark4,changeMark5,changeMark6,changeMark7,changeMark8,changeMark9];
    //创建Mark标示
    for(var i=0;i<s.length;i++){
    // 将此标示放入地图
    map.addOverlay(s[i]);
    //var Index = s[i];
    (function(i){
    s[i].addEventListener("click",function(e){
    for(var j=0;j<s.length;j++){
    if(j == i){
    //alert("i = " + i);
    var n = j+1;
    doClick(n);
    // 当鼠标点击这个标示的时候,标示的颜色改
    map.addOverlay(changeMarks[j]);
    }else{
    map.removeOverlay(changeMarks[j]);
    }
    }
    });
    })(i);
    }
      

  6.   

    我想问一下如何对panel里结果集做出点击的时候出现自定义的效果而不是它自带的信息框?