Jam*_*man 2 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();
// 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;
Run Code Online (Sandbox Code Playgroud)
在工作示例中,我将标记对象传递给loadInfo(),然后加载InfoWindow,但是现在,我只是尝试在单击标记时执行操作.实际发生的是当地图加载时正在加载警报框(其中包含"1").多个标记不会加载多个警报框,并且在加载初始警报框后(我不想要)单击标记不会执行任何操作.
非常感谢任何帮助,谢谢!
在您的addListener调用中,您实际上是在调用loadInfo而不是传递对它的引用.请尝试以下方法:
GEvent.addListener( marker1, "click", function() {
loadInfo(1);
});
Run Code Online (Sandbox Code Playgroud)
这将创建一个匿名函数,它包装您的loadInfo方法,在执行匿名函数时调用该方法.
或者,如果您没有使用任何参数loadInfo,只需删除括号也可以:
GEvent.addListener( marker1, "click", loadInfo);
Run Code Online (Sandbox Code Playgroud)
使用此类函数引用时需要记住的一点是调用它的范围.如果您要使用该'this'引用,您将遇到'this'回调函数内部实际上不会引用它的创建范围的情况,而是涉及其执行的范围,其中很可能不包含该引用.您希望调用的字段或方法,导致错误说明Undefined.正如Jonathan指出的那样,你必须使用call()和apply()方法显式绑定,以确保你的函数在正确的范围内执行.
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |