手动触发单击数据图层会传递不同的对象,而不是在屏幕上单击它

时间:2015-10-23 17:07:51

标签: google-maps-api-3

当我在正在侦听点击事件的 google.maps.Data.Layer 上使用 google.maps.event.trigger 时,latLng对象会被传递给我的听众而不是实际点击该功能:

//feat is generic google.maps.Data object
feat.addListener('click', function (e) {
        console.log(e);
    });

//  the event is the latLng object
//  place is the same location as when I manually click on the map
google.maps.event.trigger(feat, 'click', {
                    latLng: place.geometry.location
                });
>>> Object {latLng: L}

//  when I actually click at the same position, the event is different
>>> NW {latLng: L, Gb: MouseEvent, pixel: undefined, Ja: undefined, feature: Ec}

如何手动触发与实际点击地图具有相同形式的点击事件?

1 个答案:

答案 0 :(得分:0)

问题是:Data类上的click事件的回调函数有一个Data.MouseEvent可供它使用:

https://developers.google.com/maps/documentation/javascript/reference#Data.MouseEvent

即。在此代码中,e是Data.MouseEvent:

feat.addListener('click', function (e) {
    console.log(e);
});

因此,当您将e输出到控制台时,这就是您获得的内容:

NW {latLng: L, Gb: MouseEvent, pixel: undefined, Ja: undefined, feature: Ec}

但是当你触发它时,你传递给事件的唯一值是LatLng对象。如果你想使它相同,你需要构建一个Data.MouseEvent。

我想是这样的事情:

var event = new google.maps.Data.MouseEvent({
   latLng: place.geometry.location 
});

google.maps.event.trigger(feat, 'click', event);

您可能还需要为该Data.MouseEvent指定feature属性;我不确定你是否能够使用你已经拥有的数据对象:

var event = new google.maps.Data.MouseEvent({
   latLng: place.geometry.location,
   feature: feat 
});