Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Non funziona l'isruzione di controllo "for"

    Ciao ragazzi praticamente non funziona il for in questo pezzo di codice e non capisco proprio il perché :


    codice:
    function initialize() {
    var mapDiv = document.getElementById('map_canvas');
    var myOptions = {
    zoom: 2,
    center: new google.maps.LatLng(0.0, 0.0),
    mapTypeId: google.maps.MapTypeId.TERRAIN,
    mapTypeControl: true,
    mapTypeControlOptions: {
    style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
    position: google.maps.ControlPosition.TOP_CENTER
    },
    panControl: true,
    panControlOptions: {
    position: google.maps.ControlPosition.TOP_RIGHT
    },
    zoomControl: true,
    zoomControlOptions: {
    style: google.maps.ZoomControlStyle.LARGE,
    position: google.maps.ControlPosition.TOP_RIGHT
    },
    scaleControl: true,
    scaleControlOptions: {
    position: google.maps.ControlPosition.TOP_CENTER
    }
    }; 
     // Create a script tag and set the USGS URL as the source.
      var script = document.createElement('script');
      script.src = 'http://earthquake.usgs.gov/earthquakes/feed/v0.1/summary/2.5_week.geojsonp';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(script, s);
    
    map = new google.maps.Map(mapDiv, myOptions);
    infoWindow = new google.maps.InfoWindow();
    
     
    }
    questo primo pezzo crea la mappa di Google ed è OK.. poi:

    codice:
     window.eqfeed_callback = function(results) {
     
       var shape = {
          coord: [1, 1, 1, 20, 18, 20, 18 , 1],
          type: 'poly'
      }; 
    
    for (var i = 0; i < results.features.length; i++) {
        var sism = results.features[i];
     var timeeq = results.features[i].properties.time;
        var coords = results.features[i].geometry.coordinates;
     var mag = results.features[i].properties.mag;
     var place = results.features[i].properties.place;
     var latLng = new google.maps.LatLng(coords[1], coords[0]);
        var marker = new google.maps.Marker({
          position: latLng,
          map: map,
          title: place + timeeq,
       shape: shape,
       flat: true
        });
        google.maps.event.addListener(marker, 'click', function() {
          var myHtml = '<div style="font-weight: bold; font-size: medium; margin-bottom: 0em;" jstcache="0">'+ place + '</div>' +  timeeq;
          infoWindow.setContent(myHtml);
          infoWindow.open(map, marker);
        });

    è la funzione che serve a creare dei marker per ogni evento sismico. Prendendo i dati da

    http://earthquake.usgs.gov/earthquak..._week.geojsonp

    Praticamente non mi funziona l'ultimo parte, ovvero:

    google.maps.event.addListener(marker, 'click', function() {
    var myHtml = '<div style="font-weight: bold; font-size: medium; margin-bottom: 0em;" jstcache="0">'+ place + '</div>' + timeeq;
    infoWindow.setContent(myHtml);
    infoWindow.open(map, marker);
    });


    che dovrebbe crearmi un fumetto ogni volta che clicco un marker, visualizzandomi i corretti valori corrispondenti a "place" e "timeeq" (corretti se il "FOR" funzionasse anche per questo pezzo di codice)


    e invece su qualsiasi marker clicco mi si apre il fumetto del marker corrispondente all'ultimo evento sismico del file.

    Ovvero come se "place" e "timeeq" fossero:

    codice:
     var place = results.features[0].properties.place;
    
    var timeeq = results.features[0].properties.time;

    quando invece tra le parentesi quadre dovrebbe corrispondere "i" ....



    Quindi perché non funziona?????????????


    GRAZIE

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non funziona perche' ad ogni ciclo tu reimposti sempre la stessa variabile, sovrascrivendo il valore precedente.

    Crea un array, valorizzalo ed assegna gli elementi ai diversi markers.
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Potresti farmi un esempio pratico anche solo con due righe di codice?

    perche' non capisco come potrei assegnare gli elementi ai vari marker se io nel codice costruisco un solo marker con parametri generici, perche e' con il FOR che creo tutti i marker...

  4. #4
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    Hai sempre e solo l' ultimo valore di features[indiceUltimo] in gioco, perché è con esso che il ciclo for ti lascia le variabili.
    Prova questo per capire:
    codice:
    <script>
    var guys = new Array('enzo','marco','lara','elena');
    
    for (var i = 0; i < 4; i++) {
        var sism = guys[i];
    alert('ora sism dice: ' + sism);
    }
    document.write('alla fine sism dice solo: ' + sism);
    </script>
    Peraltro, sarebbe più corretto fare così (ma non è questo che te lo aggiusta):
    codice:
         var sism; //dichiari la variabile lasciandola indefinita.
    for (var i = 0; i < 4; i++) {
            sism = guys[i]; //le assegni un diverso valore di volta in volta.
    //ecc.

  5. #5
    Quote Originariamente inviata da Enzaccio Visualizza il messaggio
    Hai sempre e solo l' ultimo valore di features[indiceUltimo] in gioco, perché è con esso che il ciclo for ti lascia le variabili.
    Prova questo per capire:
    codice:
    <script>
    var guys = new Array('enzo','marco','lara','elena');
    
    for (var i = 0; i < 4; i++) {
        var sism = guys[i];
    alert('ora sism dice: ' + sism);
    }
    document.write('alla fine sism dice solo: ' + sism);
    </script>
    Peraltro, sarebbe più corretto fare così (ma non è questo che te lo aggiusta):
    codice:
         var sism; //dichiari la variabile lasciandola indefinita.
    for (var i = 0; i < 4; i++) {
            sism = guys[i]; //le assegni un diverso valore di volta in volta.
    //ecc.
    si ho capito ma lo soluzione al problema mi sfugge....

    come ha consigliato br1 potrei creare un array e assegnare gli elementi ai marker, ma:


    1) come creo l'array se gli elementi in questione sono presenti in un file esterno ? e soprattutto variano ogni 5 minuti
    2) devo assegnare gli elementi ai markers.... ma come faccio se io mi creo tutti i marker una sola volta con il FOR ???

  6. #6
    Up

  7. #7
    Nada?

  8. #8

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.