Google Maps API点击事件监听器被多次执行

汤耶施

我正在为WordPress构建一个Google Maps插件,已注册/登录的用户可以在其上放置新标记。

在我的initMap回调函数中,我具有以下函数,当用户单击地图时会注册该函数:

google.maps.event.addListener
map.addListener('click', function(e) {
    placeMarkerAndPanTo(e.latLng, map);
});

function placeMarkerAndPanTo(latLng, map) {
    // logged only once
    console.log('Map is clicked');

    // center clicked point on map
    map.panTo(latLng);

    // display modal box
    document.getElementById("modal").style.display = "block";

    // add click listener to submit button of the modal box
    document.getElementById("submit_modal").addEventListener("click", function() {

        // store values of input fields in variables
        var text_1 = document.getElementById("text_1").value;
        var text_2 = document.getElementById("text_2").value;
        var text_3 = document.getElementById("text_3").value;

        // store variables into array with the defined WordPress action
        var newPostData = {
            action: 'insert_new_post',
            some: text_1,
            added: text_2,
            data: text_3,
            location: latLng,
        };

        // logged multiple times
        console.log(newPostData);

        // pass array to a new function that processes the array using Ajax
        placeNewMarker(newPostData);
    });
}

如您所见,点击地图会调用一个新功能placeMarkerAndPanTo,该功能会将被点击的点平移到地图的中心。之后,将显示一个模式框,以允许用户在三个输入字段中输入一些数据。submit_modal按下按钮时,所有输入字段的数据都存储在一个数组中,该数组在另一个函数中使用Ajax插入新帖子。

这段代码的作用就像是一个魅力,将帖子添加到WordPress,并将标记放置在地图上。

但是,此过程仅在第一次时按预期方式工作:

  1. 点击地图

  2. 填写模态字段

  3. 按下模式的提交按钮

第二次执行此过程时,submit_modal一次单击后将多次执行my上的eventListener 我曾尝试清除数组并在单击submit_modal删除我的click事件,但这无济于事。

newPostData = [];
document.getElementById("submit_modal").removeEventListener("click", this);

console.log('Map is clicked');每次单击该映射仅记录一次,但是该newPostData数组的内容记录3次。这也导致多次添加到WordPress。如何解决submit_modal仅处理一次的错误

图加·埃克(Tugca Eker)

您正在注册相同的侦听器两次或更多次。对于每个placeMarkerAndPanTo呼叫,您都在注册的Click事件监听器submit_modal

您可以在函数之外定义此侦听器,但如果您定义了该侦听器,则无法访问latLng变量。因此,存储latLng到范围内的全局变量placeMarkerAndPanTosubmit_modal使用此全局变量(或隐藏的输入等)在函数外部定义单击侦听器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google Maps事件监听器jQuery

来自分类Dev

在Google Maps Android上放置点击监听器

来自分类Dev

jQuery事件监听器无法触发-Phonegp / Google Maps

来自分类Dev

Google Maps:在标记点击监听器中获取点击或标记(x,y)像素坐标

来自分类Dev

Google Maps API v3-在“ for”循环内添加事件监听器仅在某些迭代中有效

来自分类Dev

Google Maps V3不会删除事件监听器

来自分类Dev

Google Maps geoXML3:将地标传递到自己的事件监听器中?

来自分类Dev

为什么我的Google Maps事件监听器无法正常工作?

来自分类Dev

将事件监听器的on('change')添加到Google Maps信息窗口

来自分类Dev

Google Maps API的点击并按住事件

来自分类Dev

Google Maps geoXML3:将地标传递到它自己的事件监听器中吗?

来自分类Dev

Google Maps事件

来自分类Dev

Google Maps API标记点击事件未触发

来自分类Dev

如何更改监听器中Google Maps圆形标记图标的笔触颜色?

来自分类Dev

Google Maps API RefererNotAllowedError

来自分类Dev

Google Maps API DeletedApiProjectMapError

来自分类Dev

Google Maps Api许可

来自分类Dev

Google Maps Api

来自分类Dev

Google Maps REST API

来自分类Dev

Google Maps API请求

来自分类Dev

Google Maps Directions API

来自分类Dev

Google Maps API参数

来自分类Dev

标记拖动点击事件Google Maps

来自分类Dev

点击事件加载Google Maps地图

来自分类Dev

Google Maps标记事件点击问题

来自分类Dev

Google Charts事件监听器-过滤器失败后的首次点击

来自分类Dev

点击事件监听器多次触发

来自分类Dev

点击Google Maps API并获取地址

来自分类Dev

使用Google Maps API的可点击的国家