Newsgroup: it.comp.lang.javascript
Titolo: marker e sub che si comportano in modo diverso

Sto cercando di imaprare a costruire mappe google, am il problema va optr.
Ho 3 marker praticament eidentici.
Con un pulsante vorrei spengerli.
Su uno funziona e sugli amrkrltri 2 no.
Eppure sono 3 function identiche.
Se mi potete dare una mano a capire perché le function si conportano in modo 
divesto.
vi ringrazio
 
questo è il codice funzionante (a parte 2 2 pulsanti che non spengono il 
marker ed 1 si:
 
<!DOCTYPE html>
<html>
<head>
<title>Esempio di fumetto informativo</title>
<style type="text/css">
  html { height: 100% }
  body { height: 100%; margin: 0px; padding: 0px }
  #ContenitoreMappa {height: 70%;width:70%;float:left;}
 
</style>
<script type="text/javascript" 
src="
http://maps.google.com/maps/api/js?sensor=false
"></script>
 
 
<script>
 
 
var Marker1latlng = new google.maps.LatLng(43.743914451450124, 
11.063688785412639); // posizione del marker1
var markersMIOposizione = new google.maps.LatLng(43.743323070572984, 
11.062682097839337);// nuovo marker da pulsante
 
function initialize(){
     var coordinate = new google.maps.LatLng(43.74744645473739, 
11.07311052648924);
     var opzioni = {
     zoom:15,
     center:coordinate,
     mapTypeId:google.maps.MapTypeId.SATELLITE
     };
 
 
 
 
map = new google.maps.Map(document.getElementById("ContenitoreMappa"), 
opzioni);
 
 
 
 
var coordcittadella = new google.maps.LatLng(43.74561962791252, 
11.06991151032719);
marker1 = new google.maps.Marker({
position:coordcittadella,
map:map,
title:'Cittadella fortificata',
icon:"
http://google-maps-icons.googlecode.com/files/gateswalls.png
"
});
 
var contfumetto = "<div id='contfumetto'><p id='contfumetto'>La cittadella 
fortificata </p></div>"
 
var fumetto = new google.maps.InfoWindow({
    content:contfumetto,
 maxWidth:200,
});
google.maps.event.addListener(marker1, 'click', function 
(){fumetto.open(map, marker1);})
 
 
 
 
var Marker55555latlng = new google.maps.LatLng(43.74596065737552, 
11.068881542065471); // posizione del marker2
var marker55555 = new google.maps.Marker(
    {
   position: Marker55555latlng,
     map: map,
     icon: '
http://google-maps-icons.googlecode.com/files/country.png
',
   title: '55555'
});
 
   var tooltip55555 = '<div id="tooltip">'+
    'sono il tooltip 55555</p>'+
    '</div>';
 
 var infowindow2 = new google.maps.InfoWindow({
    content: tooltip55555
   });
   google.maps.event.addListener(marker55555, 'click', function() {
    infowindow2.open(map,marker55555);
   });
 
 
 
 
}//////// fini initializa
 
 
////////////////////////////////////////////////////////////////
function AggiungeMarkerMIO()
{
 
 var MarkerMIONEW = new google.maps.Marker(
    {
   position: markersMIOposizione,
     map: map,
     icon: '
http://google-maps-icons.googlecode.com/files/country.png
',
   title: 'MarkerMIO',
     flat: true,
   animation: google.maps.Animation.DROP
    }
   );
 
   var FumettoNEW = '<div id="tooltipnew">'+
    'Sono il il nuovo fumetto'+
    '</div>';
 
var infowindowMiaNEW = new google.maps.InfoWindow({
    content: FumettoNEW
   });
 
infowindowMiaNEW.open(map,MarkerMIONEW);  // apre il fumetto
}///// fine funzione
////////////////////////////////////////////////////////////
 
 
function SpengiMarkerMIONEW()
{
MarkerMIONEW.setMap(null);
}
 
function Spengimarker55555()
{
marker55555.setMap(null);
}
 
function accendi()
{
marker1.setMap(map);
}
 
function spengi()
{
marker1.setMap(null);
}
 
</script>
</head>
<body onLoad="initialize()">
   <div id="ContenitoreMappa"></div>
   <div>
     <input name="button" type="submit" id="button" onClick="accendi()" 
value="accendi marker1">
     <input name="button2" type="submit" id="button2" onClick="spengi()" 
value="spengi marker1">
 <input name="button4" type="submit" id="button4" 
onClick="Spengimarker55555()" value="spengi55555">
 
   <button id="drop" 
onClick="AggiungeMarkerMIO()">AggiungeMarkerMIO</button>
 
   <input name="button3" type="button" id="button3" 
onClick="SpengiMarkerMIONEW()" value="SpengiMarkerMIONEW">
 
   </div>
</body>
</html>
 
 
Ernesto
 
 
 

 });
 
"Il diavolo sta nei dettagli". La differenza � che nel primo caso ti sei
dimenticato di dichiarare la variabile. Quindi JS la considera globale.
Nel secondo caso, invece, dato che l'hai correttamente dichiarata, JS la
considera locale (sei all'interno di una function quando esegui questo
codice).
Ed essendo locale, viene distrutta - e non vista - dalle altre funzioni
quando provi ad usarla.
Difatti, se apri la console degli errori (non so in che browser sei, ma
ce l'hanno praticamente tutti oggigiorno), dovresti trovare qualcosa
tipo "marker55555 is not defined".


 
Vero, mi torna quello che scrivi, ma se io faccio:
......
......
function initialize(){
     var coordinate = new google.maps.LatLng(43.74744645473739, 
11.07311052648924);
     var opzioni = {
     zoom:15,
     center:coordinate,
     mapTypeId:google.maps.MapTypeId.SATELLITE
     };
 
 
var marker55555 = "";
 
map = new google.maps.Map(document.getElementById("ContenitoreMappa"), 
opzioni);
..........
..........
var Marker55555latlng = new google.maps.LatLng(43.74596065737552, 
11.068881542065471); // posizione del marker2
marker55555 = new google.maps.Marker(
    {
   position: Marker55555latlng,
     map: map,
     icon: '
http://google-maps-icons.googlecode.com/files/country.png
',
   title: '55555'
});
........
........
la variabiel var marker55555 = ""; è globale, ma continua a non fuzionare.
Dov'è che sbaglio?
Grazie
Ernesto
 
 

 Grazie
 
Prego!
 


Perfetto. Controllare se le variabili sono anche globali è una cosa molto 
importante.
Me ne ricorderò.
Grazie
Ernesto
 
 

 importante.
 
Beh, "ni". Nel senso: se proprio vuoi avere delle variabili che devono
essere globali, allora si, devi verificare che siano dichiarate
globalmente, e non che siano globali per "errore" (ovvero per una
mancata dichiarazione di var).
Per� generalmente, in JavaScript, si tende a usare lo scope globale il
meno possibile.
 
Riprendendo la metafora che ho scritto l'altro giorno:
"Lo scope globale � come un cesso pubblico: eviti in tutti i modi di
usarlo, e quelle volte che davvero non puoi farne a meno cerchi di
toccarlo il meno possibile."