Jquery 在谷歌地图中,javascript点击功能不起作用

Jquery 在谷歌地图中,javascript点击功能不起作用,jquery,google-maps,Jquery,Google Maps,这是我的第一个问题。我通过从外部php文件中提供的json对象获取数据来构建google地图,在那里它获取餐厅列表(本例中为4家餐厅)及其信息,并根据这些信息在地图上构建标记,然后显示餐厅列表,当我单击餐厅名称时,它应该在地图中显示出来,根据标记,此函数不起作用,代码如下: $(document).ready(function(){ $.ajax({ type:"GET", url:"proxy.php", dataType:"json",

这是我的第一个问题。我通过从外部php文件中提供的json对象获取数据来构建google地图,在那里它获取餐厅列表(本例中为4家餐厅)及其信息,并根据这些信息在地图上构建标记,然后显示餐厅列表,当我单击餐厅名称时,它应该在地图中显示出来,根据标记,此函数不起作用,代码如下:

$(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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + 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;i
openInsideMap
仅在启动的匿名函数中定义:

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()作为示例,它就不起作用了。。。