我使用Google Map V3创建了20个标记,单击一个标记,标记将显示它的infowindow(标记,infowindow全部由USGSOverlay创建)。
现在,我得到了一个错误,例如:
我点击了标记A,并显示了infowindow B,在这里我将点击infowindow B转到另一页,但是现在,标记C(在infowindow B下)也得到了clickenvent,并显示了它#s; s infowindow D。
为什么呢?我试着停止传播,但是nouse!
function makeInfoWindow(item){
var marker= new USGSOverlay(getLargeView(item),item.getLatLng(),{x:-56,y:-118},'infobox',item.id);
mGmap.addOverlay('infobox',marker);
marker.bind("click",function(event){
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
console.log("InfoWindow click ");
});
return marker;
}
USGSOverlay.prototype.bind = function (eventname, callback) {
this.clickListener=callback;
google.maps.event.addDomListener(this.htmlObj_, eventname, this.clickListener);
}
我认为标记和infowindos在同一级别,所以他们得到了相同的clickevent,我花了很多时间为此,任何人帮助我?
//marker
function makePointMarker(item){
var marker = new google.maps.Marker({
position: item.getLatLng(),
map: mGmap._map,
draggable: false,
icon: getPointIcon(item)
});
//infowindow
if(item.infoWindow == null){
item.infoWindow=makeInfoWindow(item);
item.infoWindow.hide();
}
// register marker clickevent
google.maps.event.addDomListener(marker, 'click', function() {
//event.stopPropagation();
// event.cancelBubble = true;
if(mSelectedItem!=null){
if(mSelectedItem.id==item.id){
if(mSelectedItem.infoWindow.isShow()){
mSelectedItem.infoWindow.hide();
console.log("hide");
}else{
mSelectedItem.infoWindow.show();
console.log("show");
}
refreshMap();
window.gsMapNative.onMarkerClicked(mSelectedItem.infoWindow.isShow(),item.id,item.name,item.isMainPoi,item.poiType,item.mapType,item.inChina);
return;
}else{
mSelectedItem.infoWindow.hide();
mSelectedItem.infoWindow=null;
mSelectedItem=null;
}
}
console.log("create new !");
mSelectedItem=item;
mSelectedItem.infoWindow=makeInfoWindow(item);
mSelectedItem.infoWindow.show();
refreshMap();
window.gsMapNative.onMarkerClicked(mSelectedItem.infoWindow.isShow(),item.id,item.name,item.isMainPoi,item.poiType,item.mapType,item.inChina);
return true;
});
return marker;
}
答案 0 :(得分:0)
之前我遇到过这个并通过使用markerOption infoWindowIndex解决了这个问题。因此,将所有20个infowindows放在一个全局数组列表中,并通过指定像这样的索引为每个标记指定infowindow,
var marker = new google.maps.Marker({
position: item.getLatLng(),
map: mGmap._map,
draggable: false,
icon: getPointIcon(item),
infoWindowIndex : index //* <- make sure this index points to the correct info window
});
在listner函数中,使用标记对象中的this.infoWindowIndex索引到infoWindo对象