Javascript 谷歌地图-点击标记加载窗口

Javascript 谷歌地图-点击标记加载窗口,javascript,google-maps,Javascript,Google Maps,我正在尝试创建一个带有多个标记的Google地图,当单击一个标记时,它会加载一个警报 var map = null; function setupMap() { map = new GMap2(document.getElementById("map")); map.setUIToDefault(); map.setCenter(new GLatLng( 0, 0 ), 1); map.enableDoubleClickZoom(); // C

我正在尝试创建一个带有多个标记的Google地图,当单击一个标记时,它会加载一个警报

var map = null;
function setupMap() { 

    map = new GMap2(document.getElementById("map")); 
    map.setUIToDefault();
    map.setCenter(new GLatLng( 0, 0 ), 1); 
    map.enableDoubleClickZoom(); 

    // Create the marker icon - will be repeated for each icon but
    // truncated for brevity in example
    var icon1 = new GIcon(G_DEFAULT_ICON);
    icon1.image = "uploads/1.jpg";
    icon1.shadow = "";
    icon1.iconSize = new GSize( 50, 50 );

    var latlng = new GLatLng( 0, 0 );
    markerOptions = { icon:icon1 };     
        marker1 = new GMarker( latlng, markerOptions );
    map.addOverlay( marker1 );
    GEvent.addListener( marker1, "click", loadInfo(1) );    

} 

function loadInfo( a ) {
    alert( a );
}

window.onload = setupMap;
在工作示例中,我将把marker对象传递给loadInfo(),然后加载一个InfoWindow,但现在,我只是尝试在单击marker时执行操作。实际发生的情况是,当地图加载时,正在加载一个警报框(如预期的那样,其中包含“1”)。多个标记不会加载多个警报框,在加载初始警报框后(我不希望这样),单击标记不会执行任何操作


非常感谢您的帮助,谢谢

您正在.addListener中调用loadInfo,而不提供对它的引用

GEvent.addListener( marker1, "click", loadInfo(1) );  
尝试:

有关将参数绑定到函数的更多信息,请参见。
有关非常有用的apply()的更多信息,请参见(也建议您查看call())

addListener
调用中,您实际上调用的是
loadInfo
,而不是传递对它的引用。请尝试以下操作:

GEvent.addListener( marker1, "click", function() { 
  loadInfo(1); 
});    
这将创建一个匿名函数,该函数包装您的
loadInfo
方法,在执行匿名函数时调用该方法

或者,如果您没有在
loadInfo
中使用任何参数,只需删除括号也可以:

GEvent.addListener( marker1, "click", loadInfo);    
在使用此类函数引用时,值得记住的是调用它的范围。如果要使用
'this'
引用,您将遇到这样的情况:回调函数中的
'this'
实际上不是指创建它的范围,而是指正在执行它的范围,它很可能不包含您希望调用的字段或方法,导致错误,改为声明
未定义
。正如Jonathan指出的,您必须使用
call()
apply()
方法来显式绑定,以确保函数在正确的范围内执行

loadInfo(1)
表示立即执行此函数,但需要将回调函数传递给GEvent.addListener()方法。为此,您可以使用匿名函数:

GEvent.addListener( marker1, "click", function() { loadInfo(1) });

即使GEvent.addListener(marker1,“click”,function(){ loadInfo(1); }); 已使用,我无法获取指向下一步移动的标记的链接

GEvent.addListener( marker1, "click", function() { loadInfo(1) });