7

Ich benutze Infobox mit Google Map V3 (angehängtes Bild). Beim Klicken auf Infobox möchte ich auf eine Detailseite gehen. Ich kann jedoch keinen Klick-Listener zur Infobox hinzufügen. Hier ist der Code Ich verwende:Event auf Google Karte nicht hinzufügen Infobox

enter image description here

Das ist mein infobox config:

var ib = new InfoBox({ 
     alignBottom : true, 
     disableAutoPan: false, 
     maxWidth: 0, 
     pixelOffset: new google.maps.Size(-125, -50), 
     zIndex: null, 
     closeBoxURL: "", 
     infoBoxClearance: new google.maps.Size(1, 1), 
     isHidden: false, 
     pane: "floatPane", 
     enableEventPropagation:false 
    }); 

Und ich fügte Zuhörer zu diesem infobox wie folgt aus:

google.maps.event.addListener(ib, 'domready', function() { 
     if(Ext.get(ib.div_)){ 
      Ext.get(ib.div_).on('click', function(){ 
       console.log('test on click') 
      }, this); 

      Ext.get(ib.div_).on('mousedown', function(){ 
       console.log('test on click') 
      }, this); 
     } 
    }); 

Während enableEventPropagation = false, Das Ereignis wird nicht an MAP weitergegeben, aber es wird kein Ereignis in der Infobox verarbeitet.

Während enableEventPropagation = true, die Ereignisse (klicken, mousedown) funktioniert, aber klicken Sie auf einen anderen Teil der Infobox, es dauert mich zu Karte oder einem anderen Marker.

Irgendeine Idee, wie man das löst?

+0

Haben Sie Ihr Problem gelöst? Wenn ja, dann teilen Sie uns Ihre Antwort bitte mit. – rpelluru

Antwort

0

Sie können einen Listener an den Inhalt Ihrer InfoBox anhängen.

var boxText = document.createElement('div'); 
var myOptions = { 
    content: boxText, 
    ... 
} 
var ib = new InfoBox(myOptions); 
ib.open(theMap, marker); 
boxText.setAttribute('onclick', 'alert("InfoBox clicked")'); 

Würde das für Sie arbeiten?

3

Sie müssen hinzufügen, domready Ereignis zu EventListener der infobox nicht zu Google Maps. Erst nachdem das HTML der Infobox auf dem Bildschirm angezeigt wird, können Sie das Ereignis binden. Schließen Sie eine andere Infobox, bevor Sie eine neue Infobox laden, um eine Mehrfachereignisbindung zu verhindern.

infobox= new InfoBox(); 
google.maps.event.addListener(marker, 'click', function() { 
    infobox.close(); 
    infobox= new InfoBox({ ... }); 
    infobox.open(map, this); 
    infobox.addListener("domready", function() { 
    $("#target").on("click", function(e) { /* do something */ }); 
    }); 
});