【发布时间】:2011-06-08 06:02:58
【问题描述】:
我有以下谷歌地图代码。这段代码的目的是显示一个中间有标记的地图。标记是可拖动的,当它被放下时,我需要它给出标记被放下的当前纬度/经度。该事件并不总是触发。在chrome中,如果我只是让代码运行,它就不起作用。但是,如果我通过调试并停止附加事件的代码来减慢它的速度,然后让它继续,它就可以工作。似乎某处存在竞争条件,但我不知道在哪里。有人可以看看,看看你有什么想法。
function initialize() {
var myOptions = {
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var canvas = document.getElementById("MapCanvas");
var map = new google.maps.Map(canvas, myOptions);
// Try W3C Geolocation (Preferred)
if (navigator.geolocation) {
browserSupportFlag = true;
navigator.geolocation.getCurrentPosition(function (position) {
initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(initialLocation);
marker = new google.maps.Marker({
position: initialLocation,
draggable: true,
map: map,
title: "You are here"
});
}, function () {
handleNoGeolocation(browserSupportFlag);
});
// Try Google Gears Geolocation
} else if (google.gears) {
browserSupportFlag = true;
var geo = google.gears.factory.create('beta.geolocation');
geo.getCurrentPosition(function (position) {
initialLocation = new google.maps.LatLng(position.latitude, position.longitude);
map.setCenter(initialLocation);
marker = new google.maps.Marker({
position: initialLocation,
draggable: true,
map: map,
title: "You are here"
});
}, function () {
handleNoGeoLocation(browserSupportFlag);
});
// Browser doesn't support Geolocation
} else {
browserSupportFlag = false;
handleNoGeolocation(browserSupportFlag);
}
google.maps.event.addListener(marker, 'dragend', function () {
$("#txtLat").val(marker.position.Ia);
$("#txtLong").val(marker.position.Ja);
});
}
【问题讨论】: