vue项目中百度地图开发多边形电子围栏打点解决js监听重复
addClickEvent() { //此处为关键点:如果这个全局变量不为空,说明当前已经绑定了一个监听,所以需要移除 if (this.events != null) { this.map.removeEventListener('click', this.events, false); } //此处给该公共参数重新赋值方法 this.events = (e) => { if (this.addForm.eara.length > 1) { this.creatPoint = false; } if (this.addForm.eara.length > 7) { this.$message({ message: '最多选择8个坐标', type: 'info' }); return false; } this.addForm.eara.push({ lng: e.point.lng, lat: e.point.lat }); var marker = new BMap.Marker(new BMap.Point(e.point.lng, e.point.lat)); marker.type = 'marker'; this.map.addOverlay(marker); } //添加监听,此时添加监听不会出现重复监听的情况 this.map.addEventListener('click', this.events, false); },
原生解决方式
<script> var delFunc = null;//定义全局变量 function test(){ //使用for循环模拟多次添加监听场景 for(var i = 0; i < 10; i++){ //此处为关键点:如果这个全局变量不为空,说明当前已经绑定了一个监听,所以需要移除 if(delFunc != null){ document.getElementById("testBut").removeEventListener("click", delFunc); } //此处给该公共参数重新赋值方法 delFunc = function () { console.log('监听执行方法'); }; //添加监听,此时添加监听不会出现重复监听的情况 document.getElementById("testBut").addEventListener("click", delFunc); } }</script>
function handleAction (event) { console.log('im action', event); } var newHandle = function (event) { handleAction(event); } var btns = document.getElementById('btn'); btns.addEventListener('click', newHandle, false);