老师,请问我这个问题是什么原因?
来源:4-3 地图搜索(3)
weibo_执著的弧线_0
2019-10-19 09:12:40
问题:
Uncaught TypeError: Cannot read property 'length' of undefined无法获取数据长度
无法实现跳转到点击目的地
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>地图搜索</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=fa587136f2f835dda3a721ac96f1274e&plugin=AMap.Autocomplete"></script> <style type="text/css"> *{margin: 0;padding: 0;} #content{ position: absolute; top: 0; left: 0; width: 100%; height: 100%;} #setCenterNode{ width: 200px; height: 300px; position: absolute; top: 20px; right: 20px; z-index: 3; background: #fff; } ul{ list-style: none; } #ulNode li{ cursor: pointer; } </style> </head> <body> <div id="content"> <div id="setCenterNode"> <input type="text" id="searchText"> <ul id="ulNode"></ul> </div> </div> <script type="text/javascript"> var map = new AMap.Map('content',{ center:[113.232326,23.065069], zoom:14 }) //获取输入框文字 var searchText = document.getElementById('searchText'), //获取无序列表 ulNode = document.getElementById('ulNode'); new AMap.Autocomplete({input:'searchText'}); new AMap.Autocomplete().search(this.value,function (status,data) { //data数据在tips数组中 console.log(data.tips); for (var i=0;i<data.tips.length;i++){ var oLi = document.createElement('li'); oLi.innerHTML = data.tips[i].name; oLi.P = data.tips[i].location.P; oLi.Q = data.tips[i].location.Q; ulNode.appendChild(oLi); oLi.onclick = function () { map.setCenter([Number(this.Q),Number(this.P)]); }; } }); </script> </body> </html>
1回答
同学你好,关于同学的两个问题。第一个问题解决之后,第二个问题就迎刃而解了。
1、首先在同学的代码中获取data为NO_PARAMS。原因是this的指向不对。
同学的this指向的window。window下面没有value属性。
this的正确指向应该是输入框。
建议:给输入框添加事件,就可以通过this.value拿到输入的内容。
代码如下修改:
修改了上面的代码,那么是可以实现跳转的。
效果图如下:
2、如果点击内容中带“市”字的。比如北京市,上海市,那么会有报错。如下:
是因为北京市的location为空,获取一下data,可以看到如图:
这是高德地图没有提供。一般情况下我们要查询的地点是一个具体的地方,而不是一个市。所以上面提到的情况我们了解一下就可以了。
如果帮助到了你,欢迎采纳~祝学习愉快~
相似问题