【发布时间】:2014-08-20 03:06:23
【问题描述】:
This question extends an answer here that uses domready。该扩展试图包含另一个名称略有不同的信息窗口:inwindow 与 infowindow。第一个问题是,给定回答者的第一个“规则”——“只创建一个 infowindow 对象实例并使用 setContent() 方法修改其内容。” -- 可以有第二个信息窗口对象吗?
如果是这样,那么我尝试创建inwindow 有什么问题,如下所示?单击地图时会出现inwindow,但单击其“提交”按钮似乎没有任何作用。
A working JSFiddle.com version 在这里(至少它显示了一张地图)。
接下来是一些全局变量和对象。
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);
}
}
}
【问题讨论】:
-
can there be a second infowindow object?使用 Google Maps API v3 可以有任意数量的 InfoWindows。此版本的 API 消除了仅内置于 API v2 中的硬性限制。 -
fixed jsfiddle that at least shows a map(得到一个javascript错误
google is undefined,将API添加为外部资源,将“框架和扩展设置”更改为no wrap in <head>,添加了一个onload事件来调用初始化窗口加载事件)。 -
为什么需要 var map = null;而不是var map;?为什么我不能对我的 JSFiddle.net 版本进行更改,单击Run并查看地图?另一方面,为什么如果在您的 JSFiddle.net 中,如果我将var map = null;更改为var map;并单击Run,地图是否仍然显示?咒骂!这甚至不是我要解决的主要问题,即获取输入以在地图环境中工作。 -
我刚刚注意到您在上面说 jsfiddle 遇到了 javascript 错误。您在哪里看到 jsfiddle 中的错误?我想我一个都没见过。
-
在浏览器的 javascript 控制台中(我通常使用 Chrome,除非它是浏览器特定的问题)。顺便说一句 -
var map=null;不是必需的,只是习惯,当我修复添加=null;时,您在行尾缺少一个分号。
标签: javascript google-maps-api-3 domready