发送额外的参数在谷歌地图事件功能
Send additional parameters in a google maps event function
我有这个,工作得很好:
google.maps.event.addListener(marker, 'rightclick', function(event) {
infowindow.close();
marker.setMap(null);
marker.solucionado = true;
cant_markers--;
cant_solucionados++;
});
但是我想这样做:
google.maps.event.addListener(marker, 'rightclick', deleteMarker);
function deleteMarker(marker) {
infowindow.close();
marker.setMap(null);
marker.solucionado = true;
cant_markers--;
cant_solucionados++;
});
marker
它目前不在范围内,有一种方法可以将标记对象作为参数发送?
marker
没有超出作用域,marker
是将执行处理程序的作用域。
通过addListener
添加的处理程序的范围始终是侦听器添加到的对象(addListener
的第一个参数,在您的代码中是marker
)
只需使用this
来访问处理程序中的标记:
function initialize() {
var map = new google.maps.Map(document.getElementById("map-canvas"), {
center: new google.maps.LatLng(0, 0),
zoom: 1
}),
marker = new google.maps.Marker({
map: map,
position: map.getCenter()
});
google.maps.event.addListener(marker, 'rightclick', deleteMarker);
}
function deleteMarker() {
this.setMap(null);
}
google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map-canvas {
height: 100%;
margin: 0;
padding: 0;
}
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3"></script>
<div id="map-canvas"></div>
但是,当您不想传递额外的参数给处理程序时,也可以使用deleteMarker.call
(或deleteMarker.apply
)
的例子:
function initialize() {
var map = new google.maps.Map(document.getElementById("map-canvas"), {
center: new google.maps.LatLng(1, 2),
zoom: 1
}),
marker = new google.maps.Marker({
map: map,
position: map.getCenter()
}),
var1 = "it ",
var2 = "work's";
google.maps.event.addListener(marker, 'rightclick',
function(e) {
deleteMarker.call(this, //the scope of the handler...the marker
e, //the original event
var1, //additonal argument
var2 //another argument
);
}
);
}
function deleteMarker(event, v1, v2) {
this.setMap(null);
alert(v1 + v2 + '@' + event.latLng)
}
google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map-canvas {
height: 100%;
margin: 0;
padding: 0;
}
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3"></script>
<div id="map-canvas"></div>
这是因为您已经用event参数覆盖了marker
。
试试这个…
google.maps.event.addListener(marker, 'rightclick', deleteMarker);
function deleteMarker(event) {
infowindow.close();
marker.setMap(null);
marker.solucionado = true;
cant_markers--;
cant_solucionados++;
});
如果你需要传递多个参数,你可以这样做…
google.maps.event.addListener(marker, 'rightclick', function(event) {
deleteMarker(event, marker);
});
function deleteMarker(event, marker) {
infowindow.close();
marker.setMap(null);
marker.solucionado = true;
cant_markers--;
cant_solucionados++;
});
我建议你用通用函数来构建你的应用程序,比如删除标记。有时,您可能希望同时删除标记列表,或者出于其他原因删除标记,而不是右键单击。为此,创建一个处理所有(或大多数)情况的函数比重复代码更好。
google.maps.event.addListener(marker, 'rightclick', function(e){
deleteMarkers([marker]);
});
function deleteMarkers(markers) {
for (var i=0; i < markers.length; i++) {
markers[i].setMap(null);
}
});
参见doc: https://developers.google.com/maps/documentation/javascript/events#EventArguments
相关文章:
- 在谷歌地图上获取事件的x,y坐标
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 当谷歌地图进入街景时,我能抓住什么事件
- 加载自定义磁贴后的谷歌地图事件
- 如何从谷歌地图事件访问光标位置(即页面的x和y轴)
- 谷歌地图事件-获取点击元素的父级
- 访问谷歌地图事件中的Backbone.View功能
- 谷歌地图事件侦听器 jQuery
- 来自JS库的谷歌地图事件
- 当任何谷歌地图事件被触发时,如何触发操作
- 在链接点击时触发谷歌地图事件侦听器
- 谷歌地图事件
- 如何跟踪谷歌地图事件
- 为什么我的谷歌地图事件监听器不能正常工作
- 发送额外的参数在谷歌地图事件功能
- 谷歌地图事件对象的元素列表后缺少]
- 谷歌地图事件时间戳
- 如何执行谷歌地图事件"bounds_changed"只有一次
- 谷歌地图-事件监听器创建的标记商店定位器
- 如何在茉莉测试框架中处理谷歌地图事件