Javascript 谷歌地图上的信息窗口中的按钮不起作用

Javascript 谷歌地图上的信息窗口中的按钮不起作用,javascript,google-maps,Javascript,Google Maps,我有这个谷歌地图,它正在工作,我想在infowindow上添加一个按钮,但不知怎么的,它不工作。虽然函数已定义,但仍会抛出错误 //js代码 var locations=[“158845-001-阿达斯以色列会众”,38.9369545,-77.0575097,1],“163888-137-建筑有限责任公司”,43.1765812,-84.6986701,2.0],“163888-155-建筑有限责任公司”,43.1765812,-84.6986701,3.0],“167176-007-GL

我有这个谷歌地图,它正在工作,我想在infowindow上添加一个按钮,但不知怎么的,它不工作。虽然函数已定义,但仍会抛出错误


//js代码
var locations=[“158845-001-阿达斯以色列会众”,38.9369545,-77.0575097,1],“163888-137-建筑有限责任公司”,43.1765812,-84.6986701,2.0],“163888-155-建筑有限责任公司”,43.1765812,-84.6986701,3.0],“167176-007-GLDB MTM10 GLR016”,42.4894512,-.5449508,4.0],“167195-003-91622 DB A4”,42.8275053,-.571795,5.0][“167195-002-91622 DB A4”,42.8275053,-84.5717997,6.0),“167176-005-GLDB MTM10 GLR016”,42.0023,-93.6110955,7.0),“167176-004-GLDB MTM10 GLR016”,42.0023,-93.6110955,8.0];
var映射;
var标记=[];
函数init(){
map=new google.maps.map(document.getElementById('apptMap'){
缩放:10,
中心:新google.maps.LatLng(42.0023,-93.6110955),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var num_markers=locations.length;
对于(var i=0;i
我将提出一个我认为最适合您需要的解决方案。相反,在var infowindow中调用函数,您只能定义一个变量来放置您需要的内容

您可以将您的var infowindow更改为:

var infowindow = new google.maps.InfoWindow({
    id: this.id,
    content: content, //here the variable that call your content
    position:this.getPosition()
});
因此…在您的
google.maps.event.addListener(标记[i],“单击”,function(){…
上面,您可以添加:

var content = '<button onclick="mapsZoomMarker('+i+')">Click me</button>';
var content='单击我';
这样,单击操作将起作用


希望本技巧对您有所帮助。

我将提出一个我认为最适合您需要的解决方案。您可以在var infowindow中调用函数,而只能定义一个变量来放置您需要的内容

您可以将您的var infowindow更改为:

var infowindow = new google.maps.InfoWindow({
    id: this.id,
    content: content, //here the variable that call your content
    position:this.getPosition()
});
因此…在您的
google.maps.event.addListener(标记[i],“单击”,function(){…
上面,您可以添加:

var content = '<button onclick="mapsZoomMarker('+i+')">Click me</button>';
var content='单击我';
这样,单击操作将起作用


希望这篇技巧对您有所帮助。

作用域存在问题,这就是您编写脚本的原因。我不会重写您的脚本,但我会针对您的具体情况为您提供解决方案

您需要在全局范围(窗口对象)中定义函数
mapsZoomMarker
,如下所示:

window.mapsZoomMarker = function (wnMarker){
    map.setCenter(markers[wnMarker].getPosition());
    map.setZoom(15);
} 
content: this.html +'<button onclick="mapsZoomMarker('+this.id+')">Click me</button>'
还有一个错误,在单击标记时调用的函数中

content: this.html +'<button onclick="mapsZoomMarker('+i+')">Click me</button>'

这是最新的fiddle

作用域有问题,这就是你编写脚本的原因。我不会重写你的脚本,但我会为你的具体情况提供解决方案

您需要在全局范围(窗口对象)中定义函数
mapsZoomMarker
,如下所示:

window.mapsZoomMarker = function (wnMarker){
    map.setCenter(markers[wnMarker].getPosition());
    map.setZoom(15);
} 
content: this.html +'<button onclick="mapsZoomMarker('+this.id+')">Click me</button>'
还有一个错误,在单击标记时调用的函数中

content: this.html +'<button onclick="mapsZoomMarker('+i+')">Click me</button>'

这是更新后的fiddle

了解了窗口范围,但是索引呢?循环已经从0开始,相同的索引值正在传递给函数。我是否遗漏了什么?事实上,正如我所说,构建标记的方式完全不正确。创建标记的函数在e> 因为循环结束,当循环结束时,
i
变量被设置为
8
,所以每个弹出窗口都被分配了这个代码
单击我
啊,我明白了。我没有将索引减少1,而是必须更改传递的值。现在传递这个.id,它带来了正确的值。是的,我刚刚更新了我给出了答案,但你首先从我的评论中得到了。干得好。得到了关于窗口范围的信息,但是索引呢?循环已经从0开始,相同的索引值正在传递给函数。我是否遗漏了什么?实际上正如我所说的,你构建标记的方式完全不正确。你创建标记的函数当循环的
完成时,会调用rs,当它完成时,
i
变量被设置为
8
,因此每个弹出窗口都分配了此代码
单击我
啊,我明白了。我不是将索引减少1,而是必须更改传递的值。现在传递的不是i,而是这个.id,它带来了正确的值Yes yo你是对的,我刚刚更新了答案,但你是从我的评论中首先得到的。干得好。