2
\$\begingroup\$

I was looking over questions related to setting up markers on a Google map, and though the following works perfectly fine for me, it was different from the other (and accepted) answers. I just wanted to see if I'm doing something incorrect, or just a different way.

Mine:

this references the marker, and you can pull any data you have associated with it simply by calling it within the loop that creates all of the markers.

google.maps.event.addListener(marker, "click", function(){
     infowindow.setContent(this.position.toString());
     infowindow.open(this.map, this);
});

Accepted:

 google.maps.event.addListener(marker, 'click', (function(marker, i) {
     return function() {
     infowindow.setContent(locations[i][0]);
     infowindow.open(map, marker);
    }
 })(marker, i));
\$\endgroup\$
  • \$\begingroup\$ Your version does seem fine and simple. Can you give the link to the answers you saw? \$\endgroup\$ – Quentin Pradet May 7 '13 at 7:48
  • \$\begingroup\$ Cool, good to know. And here is the link: stackoverflow.com/questions/3059044/… \$\endgroup\$ – dgig May 8 '13 at 16:44
  • \$\begingroup\$ I love how the answer goes : this is the simplest I could reduce it to ;) \$\endgroup\$ – konijn Apr 1 '14 at 1:00
3
\$\begingroup\$

Your code is definitely simpler, though I would not use it myself. There is no good reason to have an anonymous function, and if you have multiple markers, then you will have multiple clones of the same function. I would create a named function and use that function with addListener.

(I am assuming that infowindow is available to this function)

function setPositionAsContent(){
  infoWindow.setContent(this.position.toString());
  infoWindow.open(this.map, this);
}

google.maps.event.addListener(marker, "click", setPositionAsContent);
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.