Witam. Mam problem z odwoływaniem się do tablicy markerów. Spójrzmy:

  1. var map = null;
  2. var geocoder = null;
  3. var markery = [];
  4.  
  5. function load() {
  6.  
  7. if (GBrowserIsCompatible()) {
  8. mapobj=document.getElementById('map')
  9. map = new GMap2(mapobj);
  10. map.enableScrollWheelZoom();
  11. map.setMapType(G_HYBRID_MAP);
  12. geocoder = new GClientGeocoder();
  13.  
  14. //wczytaj juz wstawione markery
  15. GDownloadUrl("xml.php", function(data) {
  16. var xml = GXml.parse(data);
  17. var markers = xml.documentElement.getElementsByTagName("marker");
  18. for (var ii = 0; ii < markers.length; ii++) {
  19. var nazwa = markers[ii].getAttribute("nazwa");
  20. var adres = markers[ii].getAttribute("adres");
  21. var notatki = markers[ii].getAttribute("notatki");
  22. var typ = markers[ii].getAttribute("typ");
  23. var punkt = new GLatLng(parseFloat(markers[ii].getAttribute("lat")),
  24. parseFloat(markers[ii].getAttribute("lng")));
  25. var id = markers[ii].getAttribute("id");
  26. var marker = createMarker(punkt, nazwa, adres, typ, notatki);
  27. i=ii;
  28. markery[i]=marker;
  29. map.addOverlay(marker);
  30. updateListOnStart(nazwa,parseFloat(markers[ii].getAttribute("lat")),parseFloat(markers[ii].getAttribute("lng")),ii,typ,id);
  31. }
  32. i++;
  33. });
  34.  
  35. }
  36.  
  37. GEvent.addListener(map, "click", function(overlay, latlng) {
  38. if (latlng) {
  39.  
  40. var marker = new GMarker(latlng, {draggable:true});
  41. map.addOverlay(marker);
  42. GEvent.addListener(marker, "click", function() {
  43.  
  44. var html = "<div class='info' style='margin:0 auto;text-align:center;'><div class='info' style='margin:0 auto;text-align:center;'>"+
  45. "<p id=button' style='display: inline;padding-right:20px;'><img src='/images/2.png' style='width:40px;height:40px;'/></p>"+
  46. "<p id='button' style='display: inline;'><img src='/images/1.png' style='width:40px;height:40px;' /></p>"+
  47. "</div>"+
  48. "<div class='info' style='margin:5px auto;padding-top:5px;font-weight:bold;'><table><tr><td>Nazwa:</td><td><input type=text name='nazwa' id='nazwa' size='26' /></td></tr>"+
  49. "<tr><td>Adres:</td><td><input type='text' name='adres' id='adres' size='26' /></td></tr>"+
  50. "<tr><td>Notatki:</td><td><textarea name='notatki' id='notatki' cols='20' rows='4'></textarea></td></tr></table>"+
  51. "</div>"+
  52. "<div class='info' style='margin:5px auto;'>"+
  53. "<input type='hidden' id='chosen_type' name='chosen_type' value=''><input type='button' value='Zapisz' onclick='updateList("+
  54. latlng.lat()+","+latlng.lng()+","+i+")'/>"+"</div></div>";
  55. this.openInfoWindowHtml(html);
  56. setTimeout("window_smooth()", 1000);
  57. markery.push(marker);
  58. return marker;
  59.  
  60. });
  61.  
  62.  
  63. i++;
  64.  
  65. }
  66. });
  67.  
  68. }


window_smooth() to jquery corners (zaokrąglanie rogów) + obsługa przycisków, żeby podstawiać odpowiednią wartość pod chosen_type.

  1. function createMarker(punkt, nazwa, adres, typ, notatki) {
  2.  
  3.  
  4. var marker = new GMarker(punkt);
  5. var html = "<b>Nazwa: " + nazwa + "</b> <br/>\Adres: " + adres +
  6. "<br/>Typ: " + typ + "<br/>notatki: " + notatki;
  7. GEvent.addListener(marker, 'click', function() {
  8. marker.openInfoWindowHtml(html);
  9. });
  10. return marker;
  11. }


Teraz mam funkcje updatującą moją listę markerów, w której tworzę sobie listę lokacji. Chciałbym tam móc odwoływać się do

  1. function updateList(lat,lng,z) {
  2. ...
  3. markery[z].category=chosen_type;
  4. ...
  5. }

Tu dostaję markery[z] is undefined.
Zasadniczo zaś gdy wywołuję sobie inna funkcję:

  1. function removeMarker(index,id){
  2. ...
  3. map.removeOverlay(markery[index]);
  4. markery[index]=null;
  5. for (var iii=index; iii<markery.length;iii++)
  6. {
  7. markery[iii]=markery[iii+1];
  8. }
  9. ...
  10. }


to wszystko działa jak najbardziej poprawnie. Myślałem, że może chodzi o zasięg zmiennych, ale to jednak nie to. Z góry dzięki za wszelką pomoc.