多个可拖动标记未更新
Multiple draggable markers not updating
我在谷歌地图中实现了多个可拖动标记。现在我遇到了一个问题,我的坐标似乎除了上一个坐标之外没有更新。
我没有任何错误,但只有标记10更新了位置和地址。
var map = new google.maps.Map(document.getElementById('mapCanvas'), {
zoom: 10,
center: new google.maps.LatLng(51.012904492831055, 4.3322019042968805),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
for(var i=0;i<10;i++)
{
var latLng = new google.maps.LatLng(51.012904492831055, 4.3322019042968805);
var marker = new google.maps.Marker({
position: latLng,
title: 'Point ' + (i+1),
map: map,
draggable: true
});
google.maps.event.addListener(marker, 'dragstart', function() {
updateMarkerAddress('Dragging...');
});
google.maps.event.addListener(marker, 'drag', function() {
updateMarkerStatus('Dragging...');
updateMarkerPosition(marker.getPosition());
});
google.maps.event.addListener(marker, 'dragend', function() {
updateMarkerStatus('Drag ended');
geocodePosition(marker.getPosition());
});
}
// Update current position info.
updateMarkerPosition(latLng);
geocodePosition(latLng);
这是变量作用域问题,var marker
是循环中的全局变量,并通过循环进行更新,因此最后一个值是在循环结束时设置的。
只需将每个google.maps.event.addListener
封装在一个函数中,即
(function(marker){ // Inside this function 'marker' is a local variable.
google.maps.event.addListener(marker, 'dragstart', function() {
updateMarkerAddress('Dragging...');
});
google.maps.event.addListener(marker, 'drag', function() {
updateMarkerStatus('Dragging...');
updateMarkerPosition(marker.getPosition());
});
google.maps.event.addListener(marker, 'dragend', function() {
updateMarkerStatus('Drag ended');
geocodePosition(marker.getPosition());
});
})(marker); // Pass the 'global' marker variable as an argument
当您的事件dragstart
、drag
、dragend
被触发时,marker
变量将链接到您创建的最后一个Marker
,因为此时您的循环已经结束。
尝试下面的技巧来避免这种情况:
//..............
(function(marker){ //added line
google.maps.event.addListener(marker, 'dragstart', function() {
updateMarkerAddress('Dragging...');
});
google.maps.event.addListener(marker, 'drag', function() {
updateMarkerStatus('Dragging...');
updateMarkerPosition(marker.getPosition());
});
google.maps.event.addListener(marker, 'dragend', function() {
updateMarkerStatus('Drag ended');
geocodePosition(marker.getPosition());
});
})(marker); //added line
//..............
或者您可以使用this
来引用添加了侦听器的标记:
google.maps.event.addListener(marker, 'drag', function() {
updateMarkerStatus('Dragging...');
updateMarkerPosition(this/*instead of 'marker'*/.getPosition());
});
google.maps.event.addListener(marker, 'dragend', function() {
updateMarkerStatus('Drag ended');
geocodePosition(this/*instead of 'marker'*/.getPosition());
});
相关文章:
- 拖动&删除Fullcalendar.io资源-更新视图
- Jquery 拖动列表更新
- 如何在谷歌地图javascript中在地图上拖动标记(可拖动方向)时显示更新的坐标
- 如何在拖动行时更新输入值
- 多个可拖动标记未更新
- 可拖动和可排序项目编号在更改时更新
- 拖动事件后更新jQuery中jqxListBox的列表
- JSlPlump 端点不更新拖动
- 猫头鹰轮播2 在拖动时更新 URL 哈希导航
- AngularJS Leaflet 指令 $scope.marker 在拖动时不会更新
- 通过单击并拖动来更新 HTML 输入字段的值(类似于 unity3d 界面)
- 根据标记在另一张地图中的拖动来更新地图中心
- 拖动事件后不更新圆的Cx
- 在传单地图上设置并拖动标记可更新表单输入字段,而无需发送
- 在行拖动事件后更新多行图的域值
- 通过更新的lat&谷歌的lng将可拖动标记映射到另一个页面
- Ajax X和Y位置更新无法使用Jquery UI可拖动程序正常工作
- Kineticjs和hammerjs:拖动舞台时正确更新鼠标位置
- 如何区分在同一列表中拖动和从一个列表移动到连接列表时的可排序更新事件
- 在D3中更新带有过渡的数据后更新拖动/滚动原点