Javascript Google Maps API click eventListener执行多次
我正在为WordPress构建一个Google地图插件,注册/登录的用户可以在上面放置新的标记 在我的initMap回调函数中,我有一个以下函数,当用户单击映射时进行注册: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) { /
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会在单击一次后执行多次。我尝试在单击时清除数组并删除mysubmit\u modal
上的单击事件,但没有任何帮助
newPostData = [];
document.getElementById("submit_modal").removeEventListener("click", this);
console.log('Map is clicked')每次单击映射时,只记录一次code>,但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
变量。现在,所有操作都按需要执行一次。