1

我正在构建一个谷歌地图应用程序,并且在地图之外有一个指南针的图像。每个指南针点都在图像地图上,并且有自己的 id。我希望改变 45° 方向,具体取决于单击的指南针点。

在谷歌地图initialize功能中,我有这一行:

google.maps.event.addDomListener(document.getElementById('compassSouth'), 'click', map.setHeading(180));

但是,该处理程序在页面加载时被触发,之后不再响应。这不是由于图像映射 - 如果元素是按钮,则会发生相同的行为。

我有另一个相同格式的处理程序来响应按钮按下,它工作正常。

4

1 回答 1

1

代码完全按照您的要求执行:它在您执行代码时立即map.setHeading(180)调用该函数。

为了清楚起见,让我们逐行写出来:

var element = document.getElementById('compassSouth');
var listener = map.setHeading( 180 );
google.maps.event.addDomListener( element, 'click', listener );

如您所见,此代码会map.setHeading(180)立即调用您编写该代码的位置,然后它将该函数(我现在正在调用)的返回值传递给.listeneraddDomListener()

map.setHeading(180)根本不返回任何值 - 或者换句话说,它返回undefined,所以listenerundefined

addDomListener()看到该undefined值并忽略它:它根本没有设置任何侦听器!

您需要做的是将对函数的引用传递到addDomListener(). 你可以像这样轻松地做到这一点:

function compassClick() {
    map.setHeading( 180 );
}

var element = document.getElementById('compassSouth');
google.maps.event.addDomListener( element, 'click', compassClick );

或者正如您经常看到的那样,您可以将该compassClick函数设为匿名函数(现在回到更像您原来的代码):

google.maps.event.addDomListener(
    document.getElementById('compassSouth'), 'click',
    function() {
        map.setHeading( 180 );
    }
);
于 2013-05-11T03:59:47.067 回答