2010-06-03 10 views
28

Come afferma il titolo, in un dato evento (per me questo capita di trovarsi aprendo un nuovo google.maps.InfoWindow Voglio poter chiudere qualsiasi altra finestra informativa attualmente aperta. , Posso aprirne molti alla volta..ma voglio solo 1 aperto alla voltaChiudere tutte le finestre di informazioni aperte in google maps api v3

Sto creando le finestre di informazioni dinamicamente (cioè non so in anticipo quante saranno generate), quindi in l'evento click della finestra di informazioni corrente (che è dove voglio che tutti gli altri aperti siano chiusi) Non ho un riferimento a nessuna delle altre finestre di informazioni aperte su cui chiamare close(). Mi chiedo come posso ottenere questo Non sono un programmatore JavaScript esperto, quindi non so se ho bisogno di usare il riflesso o qualcosa di simile qui.

Il modo migliore sarebbe solo di salvare tutti i riferimenti in una sorta di collezione, quindi scorrere l'elenco chiudendoli tutti?

Grazie.

risposta

64

Ho incontrato lo stesso problema e l'ho risolto creando una finestra informativa globale.

var infowindow = new google.maps.InfoWindow(); 

Poi ho una funzione per effettuare le seguenti operazioni sul click ascoltatore:

function getInfoWindowEvent(marker) { 
    infowindow.close() 
    infowindow.setContent("This is where my HTML content goes."); 
    infowindow.open(map, marker); 
} 

questo modo si ottiene quello che penso che stai cercando b/c ora c'è solo una finestra di informazioni sulla mappa e basta chiuderlo, ricaricare il contenuto e aprirlo di nuovo per il marker indicato.

8

Dovrebbe essere sufficiente avere un infowindow globale e quindi modificare la posizione e il contenuto di quella finestra in basso.

var infowindow = new google.maps.InfoWindow(); 

// Call this function to open an infowindow i.e. on click. 
function respondToClick(latlng) { 
    infowindow.setOptions({ 
    position: latlng, 
    content" "Hello, world" 
    }); 
} 

Come lo stesso infowindow viene utilizzato ogni volta, si sono guarantee'd per sempre e solo avere uno aperto, e utilizza meno risorse/memoria che creare e poi distruggere più infowindows.

0

Il modo migliore per farlo credo ... sta avendo un oggetto con le infowindows che avete aperto

Ho due oggetti, informazioni sono tutte le infowindows creato e marcatori contiene tutti i marcatori con essi infowindows quindi ho solo eseguire queste funzioni che ciclo dell'oggetto infowindow e chiudere tutti i infowindows

function CloseInfowindows() { 
    for (var mkey in infos) { 
    var mobj = markers[mkey]; 
    mobj.infowindow.close(); 
    } 
} 
2

infowindow è variabile locale e la finestra non è disponibile al momento della close()

var latlng = new google.maps.LatLng(-34.397, 150.644); var infowindow 
= null; 

... 

google.maps.event.addListener(marker, 'click', function() { 
    if (infowindow) { 
     infowindow.close(); 
    } 
    infowindow = new google.maps.InfoWindow(); 
    ... }); 
... 

REF: Close all infowindows in Google Maps API v3

1

ho deciso di creare un array di tutti Infobox creata dinamicamente. Quando fai clic su un qualsiasi primo viaggio, l'array e poi chiudi tutti aprono solo uno in cui hai fatto clic.

var allInfos = []; 

function closeInfos() { 
     for (i = 0; i < allInfos.length; i++) { 
      allInfos[i].close(); 
     } 
} 

Una volta creato l'infobox, dinamicamente stai aggiungendo che alla matrice ciascuno come segue:

allInfos.push(infowindow); 
1

è necessario solo una riga: $(".gm-style-iw").next().click();

C'è un div con questa classe, 'gm-style-iw', all'interno del infowindow. Dopo, c'è il div del pulsante di chiusura. Quindi, questo codice farà clic su tutti i pulsanti di chiusura a finestra presenti nella mappa

+1

Dovresti spiegare perché e come questo risolve il problema. Vedi [qui] (http://stackoverflow.com/help/how-to-answer) per i dettagli ... – jkalden

+1

C'è un div con questa classe, 'gm-style-iw', all'interno del infowindow. Dopo, c'è il div del pulsante di chiusura. Quindi, questo codice farà clic su tutti i pulsanti di chiusura a finestra presenti nella mappa. –

+0

funziona, grazie! e non c'è bisogno di creare tonnellate di variabili – djdance

Problemi correlati