老师,请问我这个问题是什么原因?
来源: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,可以看到如图:

这是高德地图没有提供。一般情况下我们要查询的地点是一个具体的地方,而不是一个市。所以上面提到的情况我们了解一下就可以了。
如果帮助到了你,欢迎采纳~祝学习愉快~
相似问题