"无法读取未定义的Google地图的属性'zindex'

Jos*_*osh 11 javascript google-maps-api-3

我正在尝试使用API​​向Google地图添加自定义控件.我已经添加了两个自定义控件,它们工作得很好.我试图复制并粘贴第三个控件的代码(当然更改相关变量)并且我不断收到上述错误(在标题中).

Chrome控制台和Firebug似乎没有指出特定的问题(它在谷歌地图api代码中打破).通过逐步注释出行,我将其缩小到这个特定的行:

map.controls[google.maps.ControlPosition.TOP_RIGHT].push(churchControlDiv);
Run Code Online (Sandbox Code Playgroud)

添加控件的完整代码如下:

function ChurchControl(churchControlDiv, map) {
churchControlDiv.style.padding = '5px 0px';
var churchControlUI = document.createElement('DIV');
churchControlUI.style.backgroundColor = 'white';
churchControlUI.style.borderStyle = 'solid';
churchControlUI.style.borderWidth = '1px';
churchControlUI.style.borderColor = 'gray';
churchControlUI.style.boxShadow = 'rgba(0, 0, 0, 0.398438) 0px 2px 4px';
churchControlUI.style.cursor = 'pointer';
churchControlUI.style.textAlign = 'center';
churchControlUI.title = 'Click to see Churches';
churchControlDiv.appendChild(churchControlUI);
var churchControlText = document.createElement('DIV');
churchControlText.style.fontFamily = 'Arial,sans-serif';
churchControlText.style.fontSize = '13px';
churchControlText.style.padding = '1px 6px';
churchControlText.style.fontWeight = 'bold';
churchControlText.innerHTML = 'Churches<br>??????????????????';
churchControlUI.appendChild(churchControlText);

google.maps.event.addDomListener(churchControlUI, 'click', function() {
    toggle(churches);
    if (churchControlText.style.fontWeight == 'bold') {
        churchControlText.style.fontWeight = 'normal';
    } else {
        churchControlText.style.fontWeight = 'bold';
    }
});

google.maps.event.addDomListener(churchControlUI, 'mouseover', function() {
    churchControlUI.style.backgroundColor = '#e8e8e8';
});

google.maps.event.addDomListener(churchControlUI, 'mouseout', function() {
    churchControlUI.style.backgroundColor = 'white';
});
}

function initialize(){
    map = new google.maps.Map(document.getElementById("map_canvas"), {
    center: centerLatLng,
    zoom: 7,
    streetViewControl: false,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    var churchControlDiv = document.createElement('DIV');
    var churchControlDiv = new ChurchControl(churchControlDiv, map);
    churchControlDiv.index = 3;
    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(churchControlDiv);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?有3个控件的任何原因都是问题吗?

Rei*_*ica 12

我在控制台上弹出了同样的错误,同时遵循教程的原因不同.

我没有使用默认的javascript DOM操作,而是使用jQuery创建我的元素,例如

    var controlDiv = $('<div></div>');
    var controlUI = $('<div class="alert alert-info"></div>');
    controlDiv.append(controlUI);
    var controlText = $('<div>Control text here</div>');
    controlUI.append(controlText);
Run Code Online (Sandbox Code Playgroud)

这样做很好,只要你把DOM节点放到地图(而不是jQuery元素!)的末尾,使用controlUI[0]或者controlUI.get(0)像这样:

    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(controlDiv[0]);
Run Code Online (Sandbox Code Playgroud)

另请参见:
如何从jQuery对象获取本机DOM元素 - jQuery FAQ


Hei*_*ang 2

我按照教程进行操作,它与您的代码非常接近。

接近末尾的这条线需要改变

var churchControlDiv = new ChurchControl(churchControlDiv, map);
Run Code Online (Sandbox Code Playgroud)

替换churchControlDivchurchControl或其他名称,因为 ChurchControlDiv 不应被覆盖。

请参阅此处http://jsfiddle.net/FTjnE/2/

我用//CHANGED点击警报和新地图中心标记了我的更改