老师,请问我这个问题是什么原因?

来源:4-3 地图搜索(3)

weibo_执著的弧线_0

2019-10-19 09:12:40

问题:

  1. Uncaught TypeError: Cannot read property 'length' of undefined无法获取数据长度

  2. 无法实现跳转到点击目的地

<!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回答

好帮手慕言

2019-10-19

同学你好,关于同学的两个问题。第一个问题解决之后,第二个问题就迎刃而解了。

1、首先在同学的代码中获取data为NO_PARAMS。原因是this的指向不对。

同学的this指向的window。window下面没有value属性。

this的正确指向应该是输入框。

建议:给输入框添加事件,就可以通过this.value拿到输入的内容。

代码如下修改:

http://img.mukewang.com/climg/5daac04e09c06f1410040657.jpg

修改了上面的代码,那么是可以实现跳转的。

效果图如下:
http://img.mukewang.com/climg/5daac19e099ddf5a05930563.jpg

2、如果点击内容中带“市”字的。比如北京市,上海市,那么会有报错。如下:

http://img.mukewang.com/climg/5daac1e009913e8008160352.jpg

是因为北京市的location为空,获取一下data,可以看到如图:

http://img.mukewang.com/climg/5daac228090bbcb709020691.jpg

这是高德地图没有提供。一般情况下我们要查询的地点是一个具体的地方,而不是一个市。所以上面提到的情况我们了解一下就可以了。

如果帮助到了你,欢迎采纳~祝学习愉快~

0

0 学习 · 6815 问题

查看课程