Witam. Mam problem z odwoływaniem się do tablicy markerów. Spójrzmy:
var map = null;
var geocoder = null;
var markery = [];
function load() {
if (GBrowserIsCompatible()) {
mapobj=document.getElementById('map')
map = new GMap2(mapobj);
map.enableScrollWheelZoom();
map.setMapType(G_HYBRID_MAP);
geocoder = new GClientGeocoder();
//wczytaj juz wstawione markery
GDownloadUrl("xml.php", function(data) {
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var ii = 0; ii < markers.length; ii++) {
var nazwa = markers[ii].getAttribute("nazwa");
var adres = markers[ii].getAttribute("adres");
var notatki = markers[ii].getAttribute("notatki");
var typ = markers[ii].getAttribute("typ");
var punkt = new GLatLng(parseFloat(markers[ii].getAttribute("lat")),
parseFloat(markers[ii].getAttribute("lng")));
var id = markers[ii].getAttribute("id");
var marker = createMarker(punkt, nazwa, adres, typ, notatki);
i=ii;
markery[i]=marker;
map.addOverlay(marker);
updateListOnStart(nazwa,parseFloat(markers[ii].getAttribute("lat")),parseFloat(markers[ii].getAttribute("lng")),ii,typ,id);
}
i++;
});
}
GEvent.addListener(map, "click", function(overlay, latlng) {
if (latlng) {
var marker = new GMarker(latlng, {draggable:true});
map.addOverlay(marker);
GEvent.addListener(marker, "click", function() {
var html = "<div class='info' style='margin:0 auto;text-align:center;'><div class='info' style='margin:0 auto;text-align:center;'>"+
"
<p id=button' style='display: inline;padding-right:20px;'><img src='/images/2.png' style='width:40px;height:40px;'/></p>"+
"
<p id='button' style='display: inline;'><img src='/images/1.png' style='width:40px;height:40px;' /></p>"+
"
<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>"+
"
<tr><td>Adres:
</td><td><input type='text' name='adres' id='adres' size='26' /></td></tr>"+
"
<div class='info' style='margin:5px auto;'>"+
"
<input type='hidden' id='chosen_type' name='chosen_type' value=''><input type='button' value='Zapisz' onclick='updateList("+ latlng.lat()+","+latlng.lng()+","+i+")'/>"+"
</div></div>";
this.openInfoWindowHtml(html);
setTimeout("window_smooth()", 1000);
markery.push(marker);
return marker;
});
i++;
}
});
}
window_smooth() to jquery corners (zaokrąglanie rogów) + obsługa przycisków, żeby podstawiać odpowiednią wartość pod chosen_type.
function createMarker(punkt, nazwa, adres, typ, notatki) {
var marker = new GMarker(punkt);
var html = "
<b>Nazwa: " + nazwa + "
</b> <br/>\Adres: " + adres +
"
<br/>Typ: " + typ + "
<br/>notatki: " + notatki;
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
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
function updateList(lat,lng,z) {
...
markery[z].category=chosen_type;
...
}
Tu dostaję
markery[z] is undefined.
Zasadniczo zaś gdy wywołuję sobie inna funkcję:
function removeMarker(index,id){
...
map.removeOverlay(markery[index]);
markery[index]=null;
for (var iii=index; iii<markery.length;iii++)
{
markery[iii]=markery[iii+1];
}
...
}
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.