这个问题在这里扩展了一个使用domready
. 该扩展试图包含第二个名称稍有不同的信息窗口:inwindow
vs infowindow
。第一个问题是,给定回答者的第一个“规则”——“只创建一个 infowindow 对象实例并使用 setContent() 方法修改其内容。” -- 可以有第二个信息窗口对象吗?
如果是这样,那么我尝试创建inwindow
如下所示有什么问题?inwindow
单击地图时出现,但单击其“提交”按钮似乎没有做任何事情。
这里有一个工作的 JSFiddle.com 版本(至少它显示了一张地图)。
接下来是一些全局变量和对象。
var map
var infowindow = new google.maps.InfoWindow();
var inwindow = new google.maps.InfoWindow();
var markers = [];
var counter = 0;
initialize()
接下来摘录。
google.maps.event.addListener(map, 'click', function (event) {
addMarker(event.latLng);
});
google.maps.event.addListener(inwindow, 'domready', function () {
var button = document.getElementById('inputButton');
var input = document.getElementById('nameinput').value;
button.onsubmit = function() {
marker.title = input;
inwindow.close();
};
});
google.maps.event.addListener(infowindow, 'domready', function () {
var button = document.getElementById('deleteButton');
var id = parseInt(button.getAttribute('data-id'));
button.onclick = function() {
deleteMarker(id);
};
});
}
function addMarker(location) {
counter++;
var inputForm = 'Name: <input type="text" id="nameinput" size="31" maxlength="31" tabindex="1"/>' + '<input type="button" id="inputButton" value="Submit">';
var marker = new google.maps.Marker({
position: location,
map: map,
id: counter
});
inwindow.setContent(inputForm);
inwindow.open(map, marker);
markers.push(marker);
var deleteButton = '<button id="deleteButton" data-id="' + counter + '">Delete</button>';
google.maps.event.addListener(marker, 'rightclick', function () {
infowindow.setContent(deleteButton);
infowindow.open(map, marker);
});
}
function deleteMarker(markerId) {
for (var i=0; i<markers.length; i++) {
if (markers[i].id === markerId) {
markers[i].setMap(null);
}
}
}