I'm working on a page which fetches code with a Javascript httpObject and uses it to update two elements on the page - a google map, and a DIV that lists the things the marker points to.
That bit works fine. The problem is that when I create the markers, I do so through a for loop, and I add listeners to the marker in each loop. Then, when I test the page, I find the same thing happens for every marker.
Hovering over a marker should change the border colour of the corresponding bit of the DIV. Instead, each marker changes the border of the last bit. It seems like each time I add the listeners I overwrite the listeners of the previously added markers too.
I get that this is to do with the Google Maps API retaining the identity of a marker even when you create a new one in Javascript. What I don't get it how to get around it - I tried creating an array outside the loop, and changing
var newMarker = new GMarker(newLatLng);
with newMarker[count] = new GMarker(newLatLng);
but it still doesn't work.
Help Me, StackOverflow. You're my only hope. :)
Edit: A little more code
for (count=0;count<=LatArray.length;count++)
{
thisLat = LatArray[count];
thisLong = LongArray[count];
thisHTML = HTMLArray[count];
newLatLng = new GLatLng(thisLat, thisLong, true);
if (mapBounds.containsLatLng(newLatLng))
{
//alert(count);
var dinnerNumber = "dinner_"+count;
newMarkers[count] = new GMarker(newLatLng);
map.addOverlay(newMarkers[count]);
GEvent.addListener(newMarkers[count],'mouseover',function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';
});
}// for
You could just create each div , and a add a mouseover and mouseout listener that would change the icon and back for the markers.
The Google Maps APIs now support you in creating beautiful styled maps for your Android and iOS apps as well as your website using the same JSON style object.
Closure issue -- all those listeners share the same dinnerNumber variable. Try this:
GEvent.addListener(newMarkers[count], 'mouseover', (function(dinnerNumber){ return function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';}; })(dinnerNumber));
This way, each listener is created with its own closed copy of dinnerNumber.
You have to read carefully
GEvent.addListener(newMarkers[count], 'mouseover',
(function(dinnerNumber)
{ return function()
{ document.getElementById(dinnerNumber).style.borderColor = '#000000';};
}
)(dinnerNumber)
);
you missed one ();
the 3-rd parameter is (function(var){return function(){//what you want wirh var;};})(var)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With