【问题标题】:Event inside Event in Google Maps APIGoogle Maps API 中的事件内的事件
【发布时间】:2014-07-11 15:19:01
【问题描述】:

我在使用 Google Maps API 的 addListener 时遇到了一些问题。

首先,我加载一些标记并在所有标记中附加一个事件侦听器,如下所示:

google.maps.event.addListener(this.marker, 'click', function() {
   var points = new cRota().loadRotaFromVeiculo(this.id_veiculo,
            $("#txtDataInicial").val(),
            $("#txtDataFinal").val(),
            $("#txtHora1").val(),
            $("#txtHora2").val()
            );
    this.map.removeMarkers();
    this.map.removeRoutes();
    this.map.removePolylines();


    this.polyline = new Polyline();
    this.polyline.setMap(this.map);
    this.polyline.setPoints(points);

    if (this.polyline.init()) {
        //Adiciona a polyline no mapa
        this.map.addPolyline(this.polyline);
    }

//Cria o window info para mostrar as informações da rota
    this.info_window = new InfoWindow();
    this.info_window.setMap(this.map);
    this.info_window.init();

    //Adiciona um marker pra cada ponto da polyline
    var marker_rota = new MarkerRota();
    marker_rota.setDataLocalizacao(points[0].data_localizacao);
    marker_rota.setVelocidade(points[0].velocidade);
    marker_rota.setLatitude(points[0].latitude);
    marker_rota.setLongitude(points[0].longitude);
    marker_rota.setMap(this.map);
    marker_rota.setIcon("m5.png");
    marker_rota.init();
    marker_rota.addListener();

    //Adiciona no mapa
    this.map.addMarker(marker_rota);
};

当我点击某个标记时,我从 web 服务加载数据并创建一条折线。 创建折线后,我实例化名为MarkerRota 的类。这个类扩展了另一个名为Marker的类。

所以,当我点击地图中的一个标记时,会触发该事件,然后执行所有这些操作,创建折线和其他标记。

在这个其他标记中,我还有一个 addListener 来执行其他操作。

但是,问题是,当我点击之前生成的某个标记时,会加载另一个标记,MarkerRota 创建的另一个标记的事件永远不会被触发。

这是我的MarkerRota类函数的代码

MarkerRota.prototype.addListener = function() {
    //Copia a classe para uma var
    var that = this;
    //Adiciona o evento do click do marker
    google.maps.event.addListener(this.marker, "click", (function() { 
        window.alert("TEST");
    }));
};

this.marker 属性是 google.maps.Marker 类型的对象。

发生的另一件奇怪的事情是,当我单击第一个标记时,会再次生成另一个标记并触发单击事件。

有人知道会发生什么吗?

如果您需要更多代码或更多解释,请询问。

【问题讨论】:

    标签: javascript jquery google-maps events google-maps-api-3


    【解决方案1】:

    我认为您没有定义新的标记。但除非您添加更多代码,否则我不会知道。因此,当您拨打电话时:

    MarkerRota.prototype.addListener = function() {
        //Copia a classe para uma var
        var that = this;
        //Adiciona o evento do click do marker
        google.maps.event.addListener(this.marker, "click", (function() { 
            window.alert("TEST");
        }));
    };
    

    this.marker 仍将是您的第一个标记。 (为什么单击标记会用相同的标记重新填充地图)。尝试在 MarkerRota 类中创建一个新标记?除非你已经是。

    【讨论】:

    • MarkerRota 扩展了 Marker 类,该类具有 init() 函数。在 init() 函数中,我创建了一个 google.maps.Marker 对象
    • 我还会检查 this.map.removeMarkers() 是否没有删除您想要查看的标记。我没有看到您将标记添加到数组中,除非您在 init 中执行此操作。如果您在 init 中执行此操作,则需要在 init 中添加侦听器或在 init 之前添加侦听器。
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2014-07-26
    • 2012-08-15
    • 2011-04-10
    • 2023-04-10
    • 2012-02-15
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多