我正在从数组中绘制多个多边形,然后为每个多边形添加三个事件侦听器; mouseover,mouseout并单击所有这些按预期工作,只影响特定的多边形。
我需要的是在发生单击事件时禁用mouseout事件,以便鼠标输出不会删除单击时发生的颜色更改。
在这里和其他地方阅读过很多帖子后,我尝试在mouseout事件监听器中添加一个句柄,然后添加google.maps.event.removeListener(listentothis);到点击监听器,但它不起作用。
我也试过google.maps.event.clearListeners(chartLayer,'mouseout');但那也不起作用。
可在http://testsite.imray.com/mapsv2.php
查看完整代码任何指导都会非常感激,因为它正在努力,我不明白为什么它不起作用。
由于
所要求的代码:
for (var i = 0; i < chartData.length; i++) {
chartLayer = new google.maps.Polygon({
series: chartData[i].seriesID,
paths: chartData[i].latLngs,
map: map,
strokeColor: chartData[i].colour1,
strokeOpacity: 1,
strokeWeight: 1,
fillColor: chartData[i].colour2,
fillOpacity: 0,
activeOutline: chartData[i].colour3,
activeInterior: chartData[i].colour4,
itemcode: chartData[i].itemcode,
itemname: chartData[i].itemname,
itemlink: chartData[i].itemlink,
itemscle: chartData[i].itemscle,
itemedtn: chartData[i].itemedtn
});
imrayLayer.push(chartLayer);
google.maps.event.addListener(chartLayer, 'mouseover', function() {
this.setOptions({
strokeColor: this.activeOutline,
fillColor: this.activeInterior,
fillOpacity: 0.5
});
});
var listentothis = google.maps.event.addListener(chartLayer, 'mouseout', function() {
this.setOptions({
strokeColor: this.strokeColor,
fillOpacity: 0
});
});
google.maps.event.addListener(chartLayer, 'click', function() {
google.maps.event.removeListener(listentothis);
this.setOptions({
strokeColor: this.activeOutline,
fillColor: this.activeInterior,
fillOpacity: 0.5
});
var text = '<h3>' + this.itemname + '</h3>';
text = text + this.itemscle + this.itemedtn;
text = text + '<p class="mbot5"><a href="' + this.itemlink + '" title="View full product details" target="_blank">View product page</a></p>';
text = text + '<form action="" id="addForm" name="addForm"><input type="hidden" id="ItemCode" name="ItemCode" value="' + this.itemcode + '" /><p class="bold">Add to basket <a href="javascript:void(0);" onClick="addtobasket()" title="Add this chart to your basket" /><img src="files/images/buy-arrow.png" style="vertical-align:middle;" /></a></p></form>';
text = text + '<div id="message"></div>';
showInSideDiv(text);
});
chartLayer.setMap(map);
}
答案 0 :(得分:1)
你在每个循环上覆盖chartLayer
和listentothis
,所以当你点击一个多边形时,它总会影响循环中最后创建的多边形(或事件)。
您可以在点击回调中轻松使用this
来访问点击的多边形:
google.maps.event.addListener(chartLayer,
'click',
function() {
google.maps.event.clearListeners(this,'mouseout');
});
(请注意,该方法称为clearListeners
,而不是removeListeners
,如Seb P的评论所述)