【问题标题】:Control Errors in IEIE 中的控制错误
【发布时间】:2012-01-08 10:39:59
【问题描述】:

在 IE9 中运行 OpenLayers 地图时,我收到 “无法获取属性 'displayClass' 的值:对象为空或未定义” 错误消息。

看了一圈问题,貌似是Openlayers.js文件中的这一行问题

this.controls=this.controls.concat(controls);
for(var i=0,len=controls.length;i<len;i++)
{var element=document.createElement("div");
element.className=controls[i].displayClass+"ItemInactive"; /* Problem here */
controls[i].panel_div=element;if(controls[i].title!="")
{controls[i].panel_div.title=controls[i].title;}

我的自定义工具栏的脚本是:

OpenLayers.Control.CustomNavToolbar = OpenLayers.Class(OpenLayers.Control.Panel,{
    initialize: function(options){
        OpenLayers.Control.Panel.prototype.initialize.apply(this, [options]);
        this.addControls([
            new OpenLayers.Control.Navigation({displayClass: 'olControlNavigation', zoomBoxEnabled:false}),
            new OpenLayers.Control.DrawFeature(vlayer, OpenLayers.Handler.Point, {displayClass: 'olControlDrawPoint'}),
            new OpenLayers.Control.DrawFeature(vlayer, OpenLayers.Handler.Path, {displayClass: 'olControlDrawPath'}),
            new OpenLayers.Control.DrawFeature(vlayer, OpenLayers.Handler.Polygon, {displayClass: 'olControlDrawPolygon'}),
            new OpenLayers.Control.ZoomBox({displayClass: 'olControlZoomBox', alwaysZoom:true}),
        ])
        this.displayClass = 'olControlCustomNavToolbar'
    },
    draw: function(){
        var div = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments);
        this.defaultControl = this.controls[0];
        return div;
    }
});
var panel = new OpenLayers.Control.CustomNavToolbar({div:OpenLayers.Util.getElement('panel')});
map.addControl(panel);

使用 CSS

    olControlCustomNavToolbar{
        float:left;
        right:0px;
        top:0px;
        width:160px;
        height:24px;
        margin:0px 6px 0px 0px;
    }   
    .olControlCustomNavToolbar div{
        float:right;
        height:24px;
        width:160px;
        margin:0px 0px 0px 6px;
    }
    .olControlCustomNavToolbar .olControlNavigationItemActive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/pan_on.png")!important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlNavigationItemInactive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/pan_off.png")!important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlDrawPointItemActive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/draw_point_on.png")!important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlDrawPointItemInactive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/draw_point_off.png")!important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlDrawPathItemActive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/draw_line_on.png") !important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlDrawPathItemInactive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/draw_line_off.png") !important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlDrawPolygonItemActive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/draw_polygon_on.png") !important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlDrawPolygonItemInactive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/draw_polygon_off.png") !important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlZoomBoxItemActive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/drag-rectangle-off.png") !important;
        background-repeat: no-repeat;
    }
    .olControlCustomNavToolbar .olControlZoomBoxItemInactive{
        width:24px !important;
        height:24px !important;
        margin:3px 0px 0px 6px !important;
        background-image: url("/OpenLayers-2.11/theme/default/img/drag-rectangle-on.png") !important;
        background-repeat: no-repeat;
    }

谁能稍微了解一下我在这里做错了什么?谢谢

编辑:仅供参考,这在 Firefox、Chrome 和 Opera 中运行良好。只有IE有这个问题。

编辑:对不起,我在运行 IE7 Compatible 时犯了一个错误;取下标签后改写: meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" 它在 IE9 中运行良好。

或者它在 IE7 或 IE8 模式下工作,如果有人有任何想法仍然希望在 IE7 和 IE8 中工作。谢谢,很抱歉造成混乱。

【问题讨论】:

  • 在您的OpenLayers.Control.CustomNavToolbar 类中,this.addControls 参数数组有一个尾随逗号。
  • 哇..应该早点发现..谢谢!请作为答案,以便我可以关闭问题。再次感谢

标签: javascript internet-explorer-8 internet-explorer-7 openlayers


【解决方案1】:

在您的 OpenLayers.Control.CustomNavToolbar 类中,this.addControls 参数数组有一个尾随逗号。

【讨论】:

    【解决方案2】:

    仅供参考,如果使用它,IE9 将会死掉:

    map.layers[j].proto.CLASS_NAME

    改用这个就好了:

    map.layers[j].CLASS_NAME

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 2010-12-04
      • 2019-08-09
      • 2010-12-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多