谷歌地图的DOM事件没有响应
DOM event of Google Map does not responding
Google提供了一些如何在地图上创建自定义图例的示例。这是代码。
var legend = document.createElement('div');
legend.id = 'legend';
var content = [];
content.push('<h3><b>View option</b></h3>');
content.push('<div id="general"><svg height="20" width="200"><g><rect width="15" height="12"class="general" ></g><g><text x="26" y="10">General</text></g></svg></div>');
content.push('<div id="faculty"><svg height="20" width="200"><g><rect width="15" height="12"class="faculty"></g><g><text x="26" y="10">Faculty</text></g></svg></div>');
content.push('<div id="sexDiv"><svg height="20" width="200"><g><rect width="15" height="12"class="sex"></g><g><text x="26" y="10">Sex</text></g></svg></div>');
content.push('<div id="level"><svg height="20" width="200"><g><rect width="15" height="12"class="level"></g><g><text x="26" y="10">Level of education</text></g></svg></div>');
legend.innerHTML = content.join('');
legend.index = 1;
map.controls[google.maps.ControlPosition.RIGHT_TOP].push(legend);
我正试图使用同样来自谷歌的代码使该图例具有交互性(根据用户点击的图例显示数据)。
var sexOpt = document.getElementById("sexDiv");
google.maps.event.addDomListener(sexOpt, 'click', function() {
window.alert('Sex was clicked!'); /*just to test*/
});
但是,它不听。以前,类和id名称相似,所以我认为这会是一个冲突(即使它显然没有),但它仍然不听。
document.getElementById("sexDiv")
时,<div id="sex">
不在DOM中。一种选择是等待map
空闲事件,然后运行该代码。
google.maps.event.addListenerOnce(map, 'idle', function() {
var sexOpt = document.getElementById("sexDiv");
google.maps.event.addDomListener(sexOpt, 'click', function() {
window.alert('Sex was clicked!'); /*just to test*/
});
});
概念验证小提琴
代码片段:
function initialize() {
var map = new google.maps.Map(
document.getElementById("map_canvas"), {
center: new google.maps.LatLng(37.4419, -122.1419),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var legend = document.createElement('div');
legend.style.backgroundColor = 'white';
legend.style.padding = '5px';
legend.id = 'legend';
var content = [];
content.push('<h3><b>View option</b></h3>');
content.push('<div id="general"><svg height="20" width="200"><g><rect width="15" height="12"class="general" ></g><g><text x="26" y="10">General</text></g></svg></div>');
content.push('<div id="faculty"><svg height="20" width="200"><g><rect width="15" height="12"class="faculty"></g><g><text x="26" y="10">Faculty</text></g></svg></div>');
content.push('<div id="sexDiv"><svg height="20" width="200"><g><rect width="15" height="12"class="sex"></g><g><text x="26" y="10">Sex</text></g></svg></div>');
content.push('<div id="level"><svg height="20" width="200"><g><rect width="15" height="12"class="level"></g><g><text x="26" y="10">Level of education</text></g></svg></div>');
legend.innerHTML = content.join('');
legend.index = 1;
map.controls[google.maps.ControlPosition.RIGHT_TOP].push(legend);
google.maps.event.addListenerOnce(map, 'idle', function() {
var sexOpt = document.getElementById("sexDiv");
google.maps.event.addDomListener(sexOpt, 'click', function() {
window.alert('Sex was clicked!'); /*just to test*/
});
var genOpt = document.getElementById("general");
google.maps.event.addDomListener(genOpt, 'click', function() {
window.alert('General was clicked!'); /*just to test*/
});
var facultyOpt = document.getElementById("faculty");
google.maps.event.addDomListener(facultyOpt, 'click', function() {
window.alert('Faculty was clicked!'); /*just to test*/
});
});
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map_canvas"></div>
相关文章:
- 在Javascript中的ajax响应之后未调用Dropdown事件
- Ember视图未响应用户启动的事件
- 如何使用更新图像源以响应新闻事件
- 为什么我没有得到对Comet服务器流事件的实时响应
- 基于类的单击事件在10行之后不响应-数据表
- EventSource 的响应具有非“文本/事件流”的 MIME 类型(“文本/纯文本”)
- 为什么不是't html<对象>元素响应鼠标事件
- jquery多个事件响应
- 使用命名函数设置多个事件响应
- 加载超链接页面后如何响应事件
- 响应菜单问题-如何在移动环境中处理HREF和onclick事件
- 尝试使用鼠标点击事件响应编写jQuery HTML5聊天框程序
- 节点 js 中的请求和响应事件如何彼此不同
- 如何为每个 AJAX 请求/响应事件添加回调
- 主干模板中的 DOM 元素不响应事件
- 如何使用 socket.io 发出事件以响应事件
- JS函数不响应事件onclick
- 如何在不占用空间的情况下隐藏元素,同时还能响应事件
- Angularjs指令在link函数中没有响应事件绑定
- 只有第一个文件输入响应事件侦听器