谷歌地图 - 点击标记点击加载窗口点击
我试图创建一个带有多个标记的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(),然后装入信息窗口,但现在,我只是试图让被点击标记时发生的动作。实际发生的情况是,当地图加载时,警告框正在加载(如预期的那样,其中的'1')。多个标记不会加载多个警报框,并且在加载了初始警报框(我不想要)后,单击标记不会执行任何操作。
任何帮助非常感谢,谢谢!
在你addListener
调用时,你实际上调用loadInfo
,而不是传递一个参考吧。而不是尝试以下操作:
GEvent.addListener(marker1, "click", function() {
loadInfo(1);
});
这将创建一个匿名函数封装您loadInfo
法中,实行匿名函数调用时的方法。
另外,如果你没有在loadInfo
使用任何参数,只需去掉括号将工作太:
GEvent.addListener(marker1, "click", loadInfo);
一些值得使用这种功能引用时牢记在这将是范围调用。如果您要使用'this'
引用,则会遇到回调函数内的'this'
事实上不会引用创建它的范围,而是引用其执行过程中最有可能不会引用的范围包含您希望调用的字段或方法,导致出现错误,而不是Undefined
。正如Jonathan指出的那样,您必须使用call()
和apply()
方法进行显式绑定,以确保您的函数在正确的范围内执行。
您在.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的更多信息,非常有用的应用()(也建议你看一下()调用以及)
loadInfo(1)
表示立即执行此函数,但您需要将回调函数传递给GEvent.addListener()方法。对于这一点,你可以使用匿名函数:
GEvent.addListener(marker1, "click", function() { loadInfo(1) });
即使GEvent.addListener(MARKER1 “单击” 功能(){ loadInfo(1); });使用了 ,我没有得到指向下一个标记的链接