javascript - How to prevent overriding an event listener -
i want create map using google maps api, , connect number of markers individual event listeners.
my js file looks (abbreviated):
var mainobject = (function($) { return { init: function() { this.set_up_map(); }, set_up_map: function() { //... var map = new google.maps.map(map_div, map_props); function add_click_events(row_id) { $(row_id).addclass('highlight'); } function draw_rows(rows) { (var = 0; < rows.length; i++) { var row = rows[i]; var row_latlng = new google.maps.latlng( row.lat, row.long); var marker = new google.maps.marker( { position: row_latlng, map: map, }); google.maps.event.addlistener(marker, "click", function() {add_click_events(row);} ); } } // call data draw_rows(rows); } })(jquery); i have iterate on markers , connect each callback (having individual row_id should highlighted). structure above overwrite event listeners last (so last row highlighted no matter marker clicked).
what way of debugging or solving this?
you should use function closure that.
function draw_rows(rows) { (var = 0; < rows.length; i++) { (function(row){ var row_latlng = new google.maps.latlng( row.lat, row.long); var marker = new google.maps.marker( { position: row_latlng, map: map, }); google.maps.event.addlistener(marker, "click", function() {add_click_events(row);} ); })(rows[i]); } } also can use let, supported in newest browsers
let row = rows[i];
Comments
Post a Comment