我正在使用 Google MAP 构建一个页面,该页面具有一个侧边栏,其中动态创建的 div 链接到地图中标记的位置。
我将 ASP.NET MVC 与 JQuery 和 Google Maps API v3 一起使用。
这是它的外观。
此页面在启动窗口中加载并动态生成。
在后台页面中,用户在输入字段中键入州或城市,在我的控制器操作中,我搜索位于该区域的所有人并返回 JSON。我得到 JSON 并用标记填充地图,然后在侧栏中制作 div 列表。
我想向那些 div 添加一个功能,当单击它们时,地图将在标记处居中。
我想出了一个我无法完成的解决方案的想法。
我添加class="clickable"
了属性“Lat”和“Lng”,其值等于与它们相关的标记中的值,我尝试使用 JQuery 获取他们的点击事件,然后使用它的 Lat 和 Lng 设置地图中心,如下所示:
$(".clickable div").click(function(){
$('map_canvas').panTo($(this).attr('lat'), $(this).attr('lng'));
}
这种方法有两个问题。- 首先,我不知道如何使用 JQuery 获取地图。我找到了两种使用 like 的方法,$('map_canvas').gMap
但没有用。尝试了我在 Stackoverflow 中找到的更多东西,但也没有用。
第二 - JQuery 不会捕获来自 DIV 的事件点击。我在 Google Chrome 控制台上测试了 JQuery 代码并且它工作但我的代码不会触发点击。我$(".clickable div").click(function(){ alert("test"); }
在谷歌浏览器上尝试过类似的东西并且它有效,但在我的脚本中它没有。
我还尝试addDomListener
在我的代码中添加侦听器,但也无法解决。
任何人都可以告诉我什么是这样做的好方法,而无需在单击 div 时重新创建地图。
我也不喜欢将 Lat 和 Lng 属性添加到 div 的想法,我不知道这是否适用于任何浏览器,或者它是否是好的做法。我只是没有解决方案。
这是我正在使用的代码。(我删除了一些以使其更短且更易于阅读)
$(document).ready(function () {
//Google Maps API V3 - Prepares the ajaxForm options.
var options = {
beforeSubmit: showRequestPesquisaAdvogados,
success: showResponsePesquisaAdvogados,
type: 'post',
resetForm: false
};
$('#form-pesquisaAdvogado').ajaxForm(options);
//$(".clickable").click(function () { alert($(this).attr('lat')) });
});
function showRequestPesquisaAdvogados(formData, jqForm, options) {
$("#modal-processing-background").show(); //Shows processing splash window
}
function showResponsePesquisaAdvogados(responseText, statusText, xhr, $form) {
$("#modal-processing-background").hide();
//Hide processing window
loadSplashWindow();
CreateMap(responseText);
CreateSideBar(responseText);
}
}
function CreateMap(json) {
var mapOptions = {
center: new google.maps.LatLng(json[0].Endereco.Lat, json[0].Endereco.Lng),
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP
// marker:true
};
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map-result"), mapOptions);
for (i = 0; i < json.length; i++) {
var data = json[i]
var myLatlng = new google.maps.LatLng(data.Endereco.Lat, data.Endereco.Lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: data.Endereco.Logradouro
});
(function (marker, data) {
// Attaching a click event to the current marker
google.maps.event.addListener(marker, "click", function (e) {
// Prepare the infoWindows content.
var contentString = //my content;
infoWindow.setContent(contentString);
infoWindow.open(map, marker);
});
//here I tried to add the listener to the div.
google.maps.event.addDomListener($(".clickable")[i], 'click',
function () {
map.panTo(new google.maps.LatLng($(this).attr('lat'),
$(this).attr('lng')));
});
})(marker, data);
}
}
function CreateSideBar(json) {
$(".sideBarConteiner").empty();
for (i = 0; i < json.length; i++) {
var contentString =
"<div class='clickable' lat='" + data.Endereco.Lat +
"' lng='" + data.Endereco.Lng + "' >" +
//...div's content here
"</div>";
$(".sideBarConteiner").append(contentString);
}
}
如果您对使代码更好或更好的实践有任何建议,因为我只有 3 个月的编程经验,所以我可能会在不知不觉中走错方向,所以如果您认为可以,请随时更改某些内容更好的方法。
我知道我的帖子有点长,我只想说清楚。
提前感谢您的支持。
问候,
塞萨尔。