原生JS动态注册注销事件时booking.html报addEvent读取错误
报错根本原因
- 你的
start函数匹配到booking.html路径时,无参数手动调用了addEvent():} else if (path.endsWith("booking.html")) { addEvent(); getSeat(); } addEvent是作为座位元素的点击事件回调设计的,内部依赖浏览器自动传入的事件对象event,通过event.target获取被点击的座位DOM元素。- 手动调用时没有传入任何参数,
event的值为undefined,访问event.target时就会抛出Cannot read property 'target' of undefined错误。
修复方案
- 删除路径判断里多余的
addEvent()调用:addEvent只需要在后续的座位元素点击事件绑定时使用,不需要手动提前执行。 - 你现在直接调用的
getSeat()逻辑也有问题:这个函数是处理订票提交逻辑的,应该绑定到订票按钮的点击事件上,而不是页面加载时直接执行,否则打开页面就会弹出“请先选择座位”的提示。 - 补充其他潜在问题的修复:
document.getElementsByClassName返回的是类数组对象,不是单个DOM元素,直接绑定事件会报错,需要取下标为0的元素,比如document.getElementsByClassName('reset')[0].addEventListener(...)- sessionStorage不存在
bookingData时,JSON.parse会返回null,后续遍历data.length会报错,需要加空值兜底:var data = JSON.parse(sessionStorage.getItem('bookingData')) || [] - 路径判断里单独写
browserDetection;是无意义语句,后续给#specific-h3设置内容时直接使用该变量即可,不需要单独调用。
内容的提问来源于stack exchange,提问作者Lexlecter
相关产品推荐
相关产品推荐

