Jquery 在谷歌地图中,javascript点击功能不起作用
这是我的第一个问题。我通过从外部php文件中提供的json对象获取数据来构建google地图,在那里它获取餐厅列表(本例中为4家餐厅)及其信息,并根据这些信息在地图上构建标记,然后显示餐厅列表,当我单击餐厅名称时,它应该在地图中显示出来,根据标记,此函数不起作用,代码如下:Jquery 在谷歌地图中,javascript点击功能不起作用,jquery,google-maps,Jquery,Google Maps,这是我的第一个问题。我通过从外部php文件中提供的json对象获取数据来构建google地图,在那里它获取餐厅列表(本例中为4家餐厅)及其信息,并根据这些信息在地图上构建标记,然后显示餐厅列表,当我单击餐厅名称时,它应该在地图中显示出来,根据标记,此函数不起作用,代码如下: $(document).ready(function(){ $.ajax({ type:"GET", url:"proxy.php", dataType:"json",
$(document).ready(function(){
$.ajax({
type:"GET",
url:"proxy.php",
dataType:"json",
contentType:"text/json",
success:function(res){
$.post('getinfo.php', {data: res}, function(data){
response = jQuery.parseJSON(data);
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("google_map_div"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(0,0),0);
var side_bar_html = "";
var gmarkers = [];
var htmls = [];
var i = 0;
function createMarker(point,name,html) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
gmarkers[i] = marker;
htmls[i] = html;
side_bar_html += '<a href="javascript:openInsideMap(' + i + ')">' + name + '</a><br>';
return marker;
//
}
function openInsideMap(i){
alert("WORKING" + i);
gmarkers[i].openInfoWindowHtml(htmls[i]);
}
var bounds = new GLatLngBounds();
for(i=0; i<response.length;i++){
var j = i + 1;
// obtain the attribues of each marker
var lat = parseFloat(response[i].langt);
var lng = parseFloat(response[i].longt);
var point = new GLatLng(lat,lng);
var html = response[i].localName + ": " + response[i].localAddress;
if(response[i].tapaName == ''){
var label = j + ". " + response[i].localName + " - " + response[i].localAddress;
}else{
var label = j + ". " + response[i].localName + " - " + response[i].localAddress + "<br /> " + response[i].tapaName;
}
// create the marker
var marker = createMarker(point,label,html);
map.addOverlay(marker);
// ==== Each time a point is found, extent the bounds ato include it =====
bounds.extend(point);
}
document.getElementById("side_bar").innerHTML = side_bar_html;
map.setZoom(map.getBoundsZoomLevel(bounds));
map.setCenter(bounds.getCenter());
}
});
}
});
$(文档).ready(函数(){
$.ajax({
键入:“获取”,
url:“proxy.php”,
数据类型:“json”,
contentType:“text/json”,
成功:功能(res){
$.post('getinfo.php',{data:res},函数(数据){
response=jQuery.parseJSON(数据);
if(GBrowserIsCompatible()){
var-map=newgmap2(document.getElementById(“google\u-map\u-div”);
addControl(新的GlargeMappControl());
addControl(新的GMapTypeControl());
地图设置中心(新格拉特林(0,0),0);
var side_bar_html=“”;
var gmarkers=[];
var htmls=[];
var i=0;
函数createMarker(点、名称、html){
var标记=新的GMarker(点);
addListener(标记“单击”,函数(){
marker.openInfoWindowHtml(html);
});
gmarkers[i]=标记;
htmls[i]=html;
侧栏html+='
';
返回标记;
//
}
函数openInsideMap(i){
警报(“工作”+i);
openInfoWindowHtml(htmls[i]);
}
var bounds=新的glatlngbunds();
for(i=0;iopenInsideMap
仅在启动的匿名函数中定义:
function(data){
response = jQuery.parseJSON(data);
您可以通过使用事件侦听器而不是javascript URL来解决此问题。例如,假设document.getElementById(“侧栏”)
最初没有子项:
function createMarker(point,name,html) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
gmarkers[i] = marker;
htmls[i] = html;
var newLink = document.createElement("a");
newLink.addEventListener("click",
(function(i)
{
return function()
{
openInsideMap(i);
};
})(i), false);
document.getElementById("side_bar").appendChild(newLink);
return marker;
//
}
现在,openInsideMap
将被关闭。匿名函数是必需的,因此您不会总是获得最新的i
然后删除:
document.getElementById("side_bar").innerHTML = side_bar_html;
非常感谢你,马修,
我尝试了你告诉我的方法,但没有成功,所以我读了一些关于javascript中全局变量和局部变量的内容,然后我解决了这个问题,首先,我去掉了:
- $(文件)。准备好了吗
然后,我将函数openInsideMap(I);放在ajax之外,并将此函数中使用的变量放在ajax之外
- var gmarkers=[]
- var htmls=[]
它工作得很好。你可以通过链接查看:事实上,这是我正在为谷歌地图工作的数据:哪个函数(数据)。我试着把函数放在openInsideMap(I)上在ajax函数之外,但它仍然表示函数未定义。此外,我需要使用“I”来知道我正在推哪个餐厅,以便将其传递到地图标记。侧栏消失后,它不会显示任何内容,当我将newLink.innerText=name;放在var newLink=document.createElement(“a”)之后;是否有任何方法可以使用.ajax和$.post,因为我自己使用了lat,logt,而不是json文件,它是有效的,但是如果我仅使用$(document).ready()作为示例,它就不起作用了。。。