"Невозможно прочитать свойство" zindex "из undefined" Google maps
Я пытаюсь добавить пользовательские элементы управления к карте Google с помощью API. У меня уже есть два настраиваемых элемента управления, и они работают нормально. Я попытался скопировать и вставить код для третьего элемента управления (естественно, изменяя соответствующие переменные), и я продолжаю получать вышеуказанную ошибку (в заголовке).
Консоль Chrome и Firebug, похоже, не указывают на конкретную проблему (она ломается внутри кода api-карты google). Постепенно прокомментировав строки, я сузил ее до этой конкретной строки:
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(churchControlDiv);
Полный код для добавления элемента управления выглядит следующим образом:
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);
}
Любые идеи? Любая причина, по которой есть 3 элемента управления, будет проблемой?
Ответы
Ответ 1
Я последовал за учебником, который очень близок к вашему коду.
Эта строка ближе к концу должна изменить
var churchControlDiv = new ChurchControl(churchControlDiv, map);
Замените churchControlDiv
на churchControl
или другое имя, потому что churchControlDiv не следует перезаписывать.
См. здесь http://jsfiddle.net/FTjnE/2/
Я отметил свои изменения с помощью //CHANGED
предупреждения для клика и нового центра карты
Ответ 2
У меня была такая же ошибка, что и на моей консоли, и после нее по другой причине.
Вместо использования манипуляций DOM по умолчанию javascript я использовал 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);
Делать это хорошо, если вы даете DOM node карте (а не элементу jQuery!) в конце, используя controlUI[0]
или controlUI.get(0)
, например:
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(controlDiv[0]);
См. также:
Как получить собственный элемент DOM из объекта jQuery - часто задаваемые вопросы jQuery