我正在尝试创建一个包含多个标记的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;
在工作示例中,我将标记对象传递给loadInfo(),然后加载InfoWindow,但是现在,我只是想在单击标记时执行操作。实际发生的是当地图加载时正在加载警报框(其中包含“1”)。多个标记不会加载多个警报框,并且在加载初始警报框后(我不想要)单击标记不会执行任何操作。
非常感谢任何帮助,谢谢!
答案 0 :(得分:5)
在addListener
调用中,您实际上是在调用loadInfo
而不是传递对它的引用。请尝试以下方法:
GEvent.addListener( marker1, "click", function() {
loadInfo(1);
});
这将创建一个匿名函数,它包装你的loadInfo
方法,在执行匿名函数时调用该方法。
或者,如果您没有在loadInfo
中使用任何参数,只需删除括号也可以使用:
GEvent.addListener( marker1, "click", loadInfo);
使用此类函数引用时值得记住的是调用它的范围。如果您要使用'this'
引用,您将遇到回调函数中'this'
实际上不会引用它的创建范围的情况,而是涉及其中的范围。它正在执行,很可能不会包含您希望调用的字段或方法,从而导致错误显示Undefined
。正如Jonathan指出的那样,您必须使用call()
和apply()
方法明确绑定,以确保您的函数在正确的范围内执行。
答案 1 :(得分:1)
你在.addListener中调用loadInfo,而没有提供对它的引用。
GEvent.addListener( marker1, "click", loadInfo(1) );
尝试:
function wrap(method) {
var args = Array.prototype.slice.apply(arguments,1);
return function () {
return method.apply(this,args);
}
}
GEvent.addListener( marker1, "click", wrap(loadInfo,1) );
有关绑定函数参数的更多信息,请参阅http://www.alistapart.com/articles/getoutbindingsituations。 另请参阅https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply以获取有关非常有用的apply()的更多信息(也建议您查看call())
答案 2 :(得分:1)
loadInfo(1)
表示立即执行此函数,但您需要将回调函数传递给GEvent.addListener()方法。为此,您可以使用匿名函数:
GEvent.addListener( marker1, "click", function() { loadInfo(1) });
答案 3 :(得分:0)
即使GEvent.addListener(marker1,“click”,function(){ loadInfo(1); }); 使用过,我没有得到下一步移动标记的链接