Thanks very much Binary Tutor - I had found some links to this online but hadn't managed to get it to work. Now it works perfectly. Thank you.
On Thursday, May 8, 2014 10:27:45 PM UTC-7, Binary Tutor wrote:
-- On Thursday, May 8, 2014 10:27:45 PM UTC-7, Binary Tutor wrote:
What you need to do is create a closure.for(i=0;i<locations.length;i++) { //var thisLocation;//thisLocation = eval('location' + (i+1));coords = locations[i];mapLocations[i] = L.mapbox.featureLayer({type: 'Feature',geometry: {type: 'Point',coordinates: coords},properties: {'marker-size': 'large','marker-color': '#ec0112'}}).addTo(map);mapLocations[i].on('click', function(i) {// This is a closure. i becomes a local variable// to the function below.return function () {$('.rental-location').css('display', 'none'); $('.rental-location-' + (i+1)).css('display', 'block');};}(i);}
On Wednesday, May 7, 2014 9:05:16 PM UTC-4, Anthony Glazebrook wrote:I am creating markers on a Mapbox page and when the marker is clicked, it needs to open a different layer on the calling page.I tried creating a loop where the marker click event was assigned automatically based on the index of the loop, but this evaluated the index value at the time of running, rather than the time of creation.How can I extract this index value and have it called at the time of running?Here is the code:// Create a map in the div #mapvar map = L.mapbox.map('map', 'marashi760.heap66lg').setView([lat, lng], zoom);var locations = [[-122.386839, 37.650615],[-118.398227, 33.94466],[-117.191262, 32.744102],[-117.860223, 33.680488],[-118.144392, 33.818421],[-122.219743, 37.712569],[-121.925906, 37.366695],[-121.590065, 38.695085],[-117.346057, 33.163207]];var mapLocations = new Array();for(i=0;i<locations.length;i++) { //var thisLocation;//thisLocation = eval('location' + (i+1));coords = locations[i];mapLocations[i] = L.mapbox.featureLayer({type: 'Feature',geometry: {type: 'Point',coordinates: coords},properties: {'marker-size': 'large','marker-color': '#ec0112'}}).addTo(map);}mapLocations[0].on('click', function() {$('.rental-location').css('display', 'none'); $('.rental-location-1').css('display', 'block'); });mapLocations[1].on('click', function() {$('.rental-location').css('display', 'none'); $('.rental-location-2').css('display', 'block'); });mapLocations[2].on('click', function() {$('.rental-location').css('display', 'none'); $('.rental-location-3').css('display', 'block'); });// etc for all markersI tried adding this into the loop:mapLocations[i].on('click', function() {$('.rental-location').css('display', 'none'); $('.rental-location-' + (i+1)).css('display', 'block');}but it the penultimate line always evaluates (i+1) to the value of i at the time of running, rather than creation. It seems silly that I have to manually assign the click functionality rather than iterate through the markers.
You received this message because you are subscribed to the Google Groups "JavaScript Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to javascript-information+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.