7

Google Map V3 (ekli resim) ile Infobox kullanıyorum. Bilgi kutusuna tıklarken bir ayrıntılar sayfasına gitmek istiyorum. Ancak bilgi kutusunda bir tıklama dinleyicisi ekleyemiyorum. İşte kullanıyorum kodu:Google harita üzerinde etkinlik eklenemiyor Bilgi kutusu

enter image description here

Bu benim infobox yapılandırma geçerli:

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 
    }); 

Ve böyle bu infobox'unda için dinleyici eklendi:

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); 
     } 
    }); 

iken enableEventPropagation = false, olay MAP'ye yayılmıyor, ancak bilgi kutusunun üzerinde hiçbir etkinlik çalışmıyor.

enableEventPropagation = true sırasında, olaylar (tıkla, ara öğütülen) çalışır, ancak bilgi kutusunun diğer kısmına tıklarsanız, haritayı veya başka bir işaretçiyi bulmamı sağlar.

Bunu nasıl çözeceğiniz hakkında bir fikriniz var mı?

+0

Sorununuzu çözdünüz mü? Cevabınız evet ise lütfen cevabınızı bizimle paylaşın. – rpelluru

cevap

0

InfoBox'unuzun içeriği ne olursa olsun bir dinleyici bağlayabilirsiniz.

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

Bu sizin için çalışır mı?

3

infobox'ın eventListener öğesine google maps 'one'a değil, domready etkinliğini eklemeniz gerekir. Sadece infobox'ın html'i ekrandayken, olayı bağlayabilirsiniz. Çok olaylı ciltlemeyi önlemek için, yeni bir tane yüklemeden önce diğer bilgi kutularını kapatın.

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 */ }); 
    }); 
});