You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google地图模态表单文本框自增异常:需实现步长为1的自增

解决Google地图模态表单输入框自增步长异常的问题

嘿,我一眼就瞅出问题所在啦!你现在的代码每次点击标记打开模态框时,都会给shown.bs.modal事件新增一个监听器——说白了就是,第一次点击标记,这个监听器触发1次;第二次点击,就有2个监听器同时生效;第三次是3个,以此类推。这就导致数值不是每次加1,而是加1、加2、加3...最后就变成了1,3,6,10这种累加序列,完全不是你想要的步长为1的自增。

给你两种靠谱的解决方案:

方案一:只绑定一次模态框显示事件

把shown.bs.modal的事件绑定逻辑移到标记的点击监听外面,全程只绑定一次,这样就不会重复触发了:

// 先一次性绑定模态框显示后的自增逻辑,放在所有监听外面
$('#myModal').on('shown.bs.modal', function() {
  // 显式把输入框值转成整数,避免字符串拼接的潜在问题
  let currentValue = parseInt($("#num").val(), 10);
  $("#num").val(currentValue + 1);
});

// 地图双击添加标记的逻辑
google.maps.event.addListener(map, "dblclick", function(event){
 marker = new MarkerWithLabel ({
 position: event.latLng,
 map: map,
 icon:mmcross,
 draggable: true,
 labelContent: '',
 labelAnchor: new google.maps.Point(15,33),
 labelClass: "labels", // 自定义的CSS类
 labelInBackground: false
 });
 map.setCenter(event.latLng);
 // 标记点击只负责打开模态框即可
 google.maps.event.addListener(marker, 'click', function() {
 $('#myModal').modal('show');
 });
});

方案二:使用one()绑定单次触发事件

如果你的业务逻辑必须在标记点击时绑定事件,可以用jQuery的one()方法,它会确保事件只触发一次,不会重复累加:

google.maps.event.addListener(map, "dblclick", function(event){
 marker = new MarkerWithLabel ({
 position: event.latLng,
 map: map,
 icon:mmcross,
 draggable: true,
 labelContent: '',
 labelAnchor: new google.maps.Point(15,33),
 labelClass: "labels",
 labelInBackground: false
 });
 map.setCenter(event.latLng);
 //Add listener to marker to open modal
 google.maps.event.addListener(marker, 'click', function() {
 $('#myModal').modal('show');
 // 用one代替on,每次打开模态框只触发一次自增
 $('#myModal').one('shown.bs.modal', function() {
   let currentValue = parseInt($("#num").val(), 10);
   $("#num").val(currentValue + 1);
 });
 });
});

另外补充个小细节:虽然$("#num").get(0).value++看起来能工作,但因为输入框的value本质是字符串类型,显式用parseInt转成整数再运算,能避免用户手动输入非数字内容时出现的异常,更稳妥哦~

内容的提问来源于stack exchange,提问作者geom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:47:43