网页html错误:Uncaught TypeError: Cannot read property 'addEventListener' of null

本文介绍了一种解决地图应用中图标点击后信息框显示不响应的问题。通过使用延时监听函数,确保DOM元素完全加载后再添加事件监听器,从而避免了因DOM未准备好而导致的点击事件无法响应的情况。


逻辑是点击图标,显示信息框,代码写成这样的

function openInfo(content,e){
  var p = e.target;
  content = content+'<br/>坐标 : <br/>'+p.getPosition().lng+'&nbsp;'+p.getPosition().lat;
  content = content+"<br/><Button id='startPoint'>设为起点</Button>";
  content = content+"&nbsp;&nbsp;&nbsp;&nbsp;<Button id='endPoint'>设为终点</Button>";
  var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
  var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象
  map.openInfoWindow(infoWindow,point); //开启信息窗口
但是会发生报错:Uncaught TypeError: Cannot read property 'addEventListener' of null

影响就是第一次渲染监听不到,而后果就是点击的第一次无法监听,点击无效。

上网搜了很久也没有解决办法,其实这时候用延时监听就可以了!!!

我的代码写成这样

window.setTimeout(function() {
  document.getElementById('startPoint').addEventListener('click', function() {
    console.log(p.getPosition());
    startLng = p.getPosition().lng;
    startLat = p.getPosition().lat;
    map.closeInfoWindow();
  }, false);
  document.getElementById('endPoint').addEventListener('click', function() {
    endLng = p.getPosition().lng;
    endLat = p.getPosition().lat;
    route();
  }, false);
}, 500);
也就是在监听的时间中添加延时监听函数

window.setTimeout(function() {
}, 500);
希望可以帮到大家。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值