Leaflet.Draw 将标记保存到数据库
Leaflet.Draw save marker to DB
我正在尝试使用字段
将标记保存到数据库
lat, lon , marker description.
如果地图上只有一个标记,一切都很好,但是当我添加第二个标记时,我的代码生成 2 sql-s 而不是 1,并复制第一个添加的标记信息。
这是我的代码:
map.on('draw:created', function (e) {
var type = e.layerType;
var layer = e.layer;
var marker_lat = layer._latlng.lat;
var marker_lng = layer._latlng.lng;
// Here I open Popup to save Marker discription
$('#point_description').modal('show');
// Here save marker lat, Lng + marker description
$(document).on('click', '#save_point', function () {
var point_description_text = $('#point_description_text').val();
insertPlaques(marker_lat, marker_lng, point_description_text, modal_window);
});
drawnItems.addLayer(layer);
});
每次 Leaflet.Draw 创建新形状时,您的 'draw:created' 函数都会被调用。每次调用该方法时,都会将一个新的 on 'click' 侦听器添加到“#save_point”元素。所以第二次 'draw:created' 被调用(并且用户点击'#save_point'),将调用两个监听器。第三次,会调用三个监听器。
您应该在调用 insertPlaques 方法后使用 off()
删除点击监听器,或者考虑使用 one()
之类的方法来添加点击监听器而不是 on()
(https://api.jquery.com/one/)
我正在尝试使用字段
将标记保存到数据库lat, lon , marker description.
如果地图上只有一个标记,一切都很好,但是当我添加第二个标记时,我的代码生成 2 sql-s 而不是 1,并复制第一个添加的标记信息。
这是我的代码:
map.on('draw:created', function (e) {
var type = e.layerType;
var layer = e.layer;
var marker_lat = layer._latlng.lat;
var marker_lng = layer._latlng.lng;
// Here I open Popup to save Marker discription
$('#point_description').modal('show');
// Here save marker lat, Lng + marker description
$(document).on('click', '#save_point', function () {
var point_description_text = $('#point_description_text').val();
insertPlaques(marker_lat, marker_lng, point_description_text, modal_window);
});
drawnItems.addLayer(layer);
});
每次 Leaflet.Draw 创建新形状时,您的 'draw:created' 函数都会被调用。每次调用该方法时,都会将一个新的 on 'click' 侦听器添加到“#save_point”元素。所以第二次 'draw:created' 被调用(并且用户点击'#save_point'),将调用两个监听器。第三次,会调用三个监听器。
您应该在调用 insertPlaques 方法后使用 off()
删除点击监听器,或者考虑使用 one()
之类的方法来添加点击监听器而不是 on()
(https://api.jquery.com/one/)