Javascript 谷歌地图-点击标记加载窗口
我正在尝试创建一个带有多个标记的Google地图,当单击一个标记时,它会加载一个警报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
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) });