Javascript 获得;“未定义”;使用多个Google自动完成时

Javascript 获得;“未定义”;使用多个Google自动完成时,javascript,google-maps-api-3,autocomplete,Javascript,Google Maps Api 3,Autocomplete,我有多个表单在同一页面上使用Google Autocomplete。关于页面如何工作的一些上下文:用户基本上可以添加他们想要的步骤(要添加步骤,表单使用Google Autocomplete),在每个步骤中,他们可以添加活动(要添加活动,表单也使用Google Autocomplete) 我知道,通过为每个表单分配不同的Id,然后按Id获取元素以应用自动完成并获取数据,这是可行的,但问题是,每次用户创建一个步骤时,它都会创建一个步骤Id,然后将一个活动表单分配给一个特定的步骤Id,这使得它具有挑

我有多个表单在同一页面上使用Google Autocomplete。关于页面如何工作的一些上下文:用户基本上可以添加他们想要的步骤(要添加步骤,表单使用Google Autocomplete),在每个步骤中,他们可以添加活动(要添加活动,表单也使用Google Autocomplete)

我知道,通过为每个表单分配不同的Id,然后按Id获取元素以应用自动完成并获取数据,这是可行的,但问题是,每次用户创建一个步骤时,它都会创建一个步骤Id,然后将一个活动表单分配给一个特定的步骤Id,这使得它具有挑战性,因为最终我可以拥有很多不同的ID

这就是为什么我尝试通过类而不是id使用不同的方法。假设我有这两种形式。它们都有“搜索词”类:


然后我基本上实现了一个for循环,这样程序就可以读取这个类的所有项,然后为每个项实现autocomplete+get关于特定位置的数据。自动完成的工作。但是,当我试图获取数据时,第一项得到“未定义”

<script>
  function activatePlacesSearch(){
  var input = document.getElementsByClassName('search_term');
  var i;
  for (i = 0; i < input.length; i++) {
    var autocomplete = new google.maps.places.Autocomplete(input[i])
    google.maps.event.addListener(autocomplete, 'place_changed', function () {
      var result = autocomplete.getPlace();
      console.log(result)
      if (result != null) {
        const location = result['name']
        const name = result['name']
        const address = result['formatted_address']
        const phone_number = result['international_phone_number']
        const icon = result['icon']
        const types = result['types']
        const user_ratings_total = result['user_ratings_total']
        const rating = result['rating']
        const url = result['website']
        const latitude = autocomplete.getPlace().geometry.location.lat();
        const longitude = autocomplete.getPlace().geometry.location.lng();
        const photos = result['photos'][0].getUrl();
      };
    });
  };
};
</script>

函数activatePlacesSearch(){
var input=document.getElementsByClassName('search_term');
var i;
对于(i=0;i

我有点纠结于如何解决这个问题。非常感谢你的帮助

这只是一个猜测,但我很确定,通过覆盖变量
自动完成
会破坏功能,可能会尝试为每个自动完成使用动态变量名:

window['autocomplete_'+i] = new google.maps.places.Autocomplete(input[i])
...
var result = window['autocomplete_'+i].getPlace();
...

相关问题:我刚刚尝试过,autocomplete函数仍然有效,但我在尝试获取数据时遇到了这个错误:“无法读取未定义的属性'getPlace'。你知道为什么吗?
window['autocomplete_'+i] = new google.maps.places.Autocomplete(input[i])
...
var result = window['autocomplete_'+i].getPlace();
...