我正在构建一个Google地图应用,并在地图外面有一个指南针的图像。每个罗盘点都在图像映射上,并具有自己的ID。我希望45°方向改变,具体取决于点击的罗盘点。
在Google地图initialize
功能中,我有这一行:
google.maps.event.addDomListener(document.getElementById('compassSouth'), 'click', map.setHeading(180));
但是,该处理程序在页面加载时触发,并且在此之后不响应。这不是由于图像映射 - 如果元素是按钮,则会发生相同的行为。
我有一个相同格式的另一个处理程序响应按钮按下,这很好。
答案 0 :(得分:1)
代码完全按照您的要求执行:执行代码时,它会立即调用map.setHeading(180)
函数
为了清晰起见,让我们逐行写出来:
var element = document.getElementById('compassSouth');
var listener = map.setHeading( 180 );
google.maps.event.addDomListener( element, 'click', listener );
正如您所看到的,此代码会在您编写该代码的位置立即调用map.setHeading(180)
,然后从该函数传递返回值(我现在正在调用{{1} }}}进入listener
。
但addDomListener()
根本不会返回任何值 - 或换句话说,它会返回map.setHeading(180)
,因此undefined
为listener
。
undefined
看到addDomListener()
值并忽略它:它根本没有设置任何监听器!
您需要做的是将引用传递给undefined
中的函数。你可以这样轻松地做到这一点:
addDomListener()
或者正如您经常看到的那样,您可以将function compassClick() {
map.setHeading( 180 );
}
var element = document.getElementById('compassSouth');
google.maps.event.addDomListener( element, 'click', compassClick );
函数设置为匿名函数(现在返回到更像原始函数的代码):
compassClick