Leaflet添加标记与搜索栏时出现this.callInitHooks错误求助
报错
Uncaught TypeError: this.callInitHooks is not a function修复方案 该报错在Leaflet场景下基本由类/工厂函数调用错误、资源版本不兼容、语法错误三类原因导致,对应你的代码可按以下顺序排查修复:
1. 核心错误:LatLng调用语法错误
你的代码中标记实例化部分错误混用了Leaflet的工厂函数和构造类:
// 错误写法:L.latLng是工厂函数,不需要加new调用 marker = new L.Marker(new L.latLng(loc), {title: title} );
修改为以下任意一种即可:
// 方案1:保留new,使用大写开头的构造类L.LatLng marker = new L.Marker(new L.LatLng(loc), {title: title} ); // 方案2:去掉new,使用小写开头的工厂函数L.latLng marker = new L.Marker(L.latLng(loc), {title: title} );
2. 冗余图层加载问题
你的代码中连续4次实例化了L.geoJson(statesData)并添加到地图,仅保留最后一次赋值给geojson变量的实例即可,删除前面3行冗余的L.geoJson(statesData).addTo(map)代码,避免重复渲染导致的异常。
3. HTML标签语法错误
代码中地图容器的结束标签写错:
<!-- 错误写法 --> <div id="map"></map> <!-- 修改为 --> <div id="map"></div>
4. 资源版本兼容校验
你使用的Leaflet版本为1.3.0,需确认本地引入的leaflet-search.js是适配Leaflet 1.x版本的,若该插件是适配Leaflet 0.7.x的旧版本,也会触发该报错,替换为对应兼容版本即可。
另外需确认你引入的censustracts.js中确实定义了statesData变量,避免变量未定义导致的后续渲染异常。
内容的提问来源于stack exchange,提问作者WilliamWang97
相关产品推荐
相关产品推荐

