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

Popular posts from this blog

android - net_scheduler holding wakelock -

sql - MySQL : Getting Entries from a many-to-many table -

java - Retrieving data from database using jsp (Hibernate + Spring + Maven) -