Leaflet:如何基于API获取的JSON数据创建对应标记标签
问题根因
- 循环变量未和点位绑定:你遍历的是点位集合
pointers,循环变量为pointer,但实际读取描述用的是和当前循环点位无关联的item变量,无法正确获取当前点击点位的专属描述 - 菜单内容逻辑错误:循环内每次生成的描述元素都直接追加到同一个
menu容器中,没有做内容清空逻辑,也没有和对应点位的点击事件绑定,最终所有点位的描述都会累积展示在菜单里
修复方案
你需要在点位创建阶段就把专属描述绑定到对应点位实例上,同时点击点位时只渲染当前点位的内容,不要全量遍历所有点位追加内容,示例代码如下:
// 点位创建阶段绑定数据和点击事件 for (const item of 数据库返回的点位原始数据集) { const pointer = 你原来创建点位的方法() // 把当前点位的描述挂载到点位实例上 pointer.description = item.objDescription || "No description available." // 给单个点位绑定专属点击事件 pointer.addEventListener('click', () => { // 点击时先清空菜单原有内容,避免累积 menu.innerHTML = '' // 生成当前点位的描述元素 const title = document.createElement('div') title.textContent = pointer.description menu.appendChild(title) // 你原有展示菜单的逻辑 menu.show() }) }
内容的提问来源于stack exchange,提问作者firecode85
相关产品推荐
相关产品推荐

