Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google Maps API click eventListener执行多次_Javascript_Wordpress_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript Google Maps API click eventListener执行多次

Javascript Google Maps API click eventListener执行多次,javascript,wordpress,google-maps,google-maps-api-3,Javascript,Wordpress,Google Maps,Google Maps Api 3,我正在为WordPress构建一个Google地图插件,注册/登录的用户可以在上面放置新的标记 在我的initMap回调函数中,我有一个以下函数,当用户单击映射时进行注册: google.maps.event.addListener map.addListener('click', function(e) { placeMarkerAndPanTo(e.latLng, map); }); function placeMarkerAndPanTo(latLng, map) { /

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

在我的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);
    });
}
正如您所见,单击地图会调用一个新函数
placemarkandpanto
,该函数将单击的点平移到地图的中心。 之后,将显示一个模式框,允许用户在三个输入字段中输入一些数据。 当按下
submit\u modal
按钮时,输入字段的所有数据都存储到一个数组中,该数组用于另一个使用Ajax插入新帖子的函数

这个代码就像一个符咒,帖子被添加到WordPress,标记被放置在地图上

但这一过程仅在第一次按预期进行:

  • 点击地图

  • 填充模式字段

  • 按下模式对话框的提交按钮

  • 第二次执行此过程时,我的
    submit\u modal
    上的eventListener会在单击一次后执行多次。我尝试在单击时清除数组并删除my
    submit\u modal
    上的单击事件,但没有任何帮助

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

    console.log('Map is clicked'),但
    newPostData
    数组的内容记录三次。这也会导致多次添加到WordPress。如何修复我的错误,即
    submit\u modal
    只处理一次

    您正在注册同一个侦听器两次或更多次。对于每个
    placemarkandpanto
    调用,您都要注册
    submit\u model
    的单击事件侦听器


    您可以在函数之外定义此侦听器,但如果这样做,则无法访问
    latLng
    变量。因此,将
    latLng
    存储到
    placemarkandpanto
    范围内的全局变量。并使用此全局变量(或隐藏输入等)定义
    submit\u model
    单击函数外部的侦听器。

    您将
    removeEventListener
    放在
    document.getElementById(“submit\u model”)。addEventListener(“click”,function(){})
    并测试将其放置在调用
    placeMarker
    函数的上方和下方。是的,成功了!谢谢你把我引向正确的方向!我已将我的
    submit\u modal
    的eventListener放置在
    placemarkandpanto
    函数之外,但仍在我的
    initMap
    回调中。我还按照建议添加了一个全局
    latLng
    变量。现在,所有操作都按需要执行一次。