【问题标题】:jQuery and google maps auto completejQuery 和谷歌地图自动完成
【发布时间】:2015-03-22 18:55:25
【问题描述】:

我的 Google 地图自动完成功能正在处理多个input 标记,如下所示:

 <input class="controls pac-input" id="pac-input" type="text" onfocus="geolocate()" placeholder="Type custom address" />

要启用谷歌地图自动完成,我有以下代码:

//https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
$(document).ready(function () {

    autocomplete = new google.maps.places.Autocomplete((document.getElementById('pac-input')), { types: ['geocode'] });

    google.maps.event.addListener(autocomplete, 'place_changed', function () {
        MyFunc();
    });

});

然后,在MyFunc() 函数中我做我需要的:

function MyFunc() {
    var fullAddress = autocomplete.getPlace().formatted_address;
    var input = $(this);
    //stuff that uses input
}

然而,这段代码有两个问题:

  • 首先是我使用了一个 ID 来影响多个输入框(我有很多输入字段)。我尝试按类选择,但失败并出现错误“未定义”。如何将该函数应用于一组输入字段?
  • 我如何知道点击了哪个字段?我尝试使用 jquery $(this) 但它不起作用。 jQuery 对我有什么帮助?

提前致谢!

【问题讨论】:

  • 请发布您的MyFunc() 函数和输入。
  • @RhapX:完成!我按要求更新了帖子!
  • 为什么会有多个输入?有什么意义?
  • @MrUpsidown:我有一个包含多个地址的表,我希望用户能够指定它们。因此,每个条目都有一个输入字段供用户输入地址。

标签: javascript jquery google-maps-api-3


【解决方案1】:

你不需要 jQuery。这是一个仅使用 javascript 的工作示例:

HTML:

<input class="autocomplete" id="ac1" placeholder="Enter your address" type="text"></input>
<input class="autocomplete" id="ac2" placeholder="Enter your address" type="text"></input>
<input class="autocomplete" id="ac3" placeholder="Enter your address" type="text"></input>

JavaScript:

var acInputs = document.getElementsByClassName("autocomplete");

for (var i = 0; i < acInputs.length; i++) {

    var autocomplete = new google.maps.places.Autocomplete(acInputs[i]);
    autocomplete.inputId = acInputs[i].id;

    google.maps.event.addListener(autocomplete, 'place_changed', function () {
        console.log('You used input with id ' + this.inputId);
    });
}

JSFiddle demo

如果你想用 jQuery 来做,那么你可以试试这个方法:

$('.autocomplete').each(function() {
    
    var autocomplete = new google.maps.places.Autocomplete($(this)[0]);
    autocomplete.inputId = $(this).attr('id');

    google.maps.event.addListener(autocomplete, 'place_changed', function () {
        console.log('You used input with id ' + this.inputId);
    });
});

JSFiddle demo

希望这会有所帮助。

【讨论】:

  • 确实有帮助!赏金!
  • autocomplete.inputId = $(this).attr('id'); 正在搜索如何到达输入。不记得我用过一百万次的标记了..聪明!
【解决方案2】:

为了找出正在调用的输入元素,您可以将事件传递给MyFunc()。使用 $(this) 不会检查该函数之外的内容以查看调用它的内容。

addListener 更新为以下内容。

google.maps.event.addListener(autocomplete, 'place_changed', function (e) {
    MyFunc(e);
});`

并将MyFunc() 更新为

function MyFunc(e) {
    var fullAddress = autocomplete.getPlace().formatted_address;
    var input = e;
    //stuff that uses input
}

然后您可以使用input 作为变量来保存有关正在更新的元素的信息。如果您在var input = e; 下方输入console.log(input);,您将看到可用于获取数据的项目列表。

您可能最感兴趣的是将var input = e; 改为var input = e.target;。这将使您可以轻松获取有关输入的信息。

示例:input.value 将返回相关输入的值。

【讨论】:

  • 我在尝试您的解决方案时收到undefined 错误:S 还有其他方法吗?
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 2014-01-12
  • 2012-02-20
  • 2016-11-17
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多