无法在Google地图信息框上添加活动

时间:2012-09-20 10:25:34

标签: javascript-events google-maps-api-3 sencha-touch-2 infobox

我正在使用带有Google Map V3的Infobox(附图)。在点击Infobox时,我想进入详细信息页面。但是我无法在信息框上添加点击监听器。这是我正在使用的代码:

enter image description here

这是我的信息框配置:

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

我在这个信息框中添加了听众:

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

虽然enableEventPropagation = false,但事件不会传播到MAP,但信息框上没有任何事件正在处理。

虽然enableEventPropagation = true,事件(点击,mousedown)有效,但点击信息框的其他部分,它需要我映射或另一个标记。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您需要将domready事件添加到信息框的eventListener,而不是谷歌地图的事件。只有在信息框的html在屏幕上之后,您才能绑定事件。要防止多事件绑定,请在加载新的信息框之前关闭其他信息框。

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

答案 1 :(得分:0)

您可以将监听器附加到InfoBox的内容中。

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

这会对你有用吗?