Google地方信息自动填充功能不适用于动态生成的输入元素

gdrt

自动完成功能可以完美地在多个静态输入字段上使用。但是,当我通过按钮添加输入字段时,自动完成功能不适用于这些输入字段。也许问题出在关闭,但是由于我的Java语言不强,我不确定。谁能帮我?

这是代码:

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>
<script>
var map = null;
var marker = [];
var autocomplete = [];
var inputs = [];
var types = [];
var autocompleteOptions = {
 componentRestrictions: {country: "az"}
};

此函数最多可动态创建5个输入字段(我将此函数放入了initialize方法中,但也无法正常工作):

$(document).ready(function(){
var count = 2;
$("#addInputField").click(function(){
    count++;
    $("#inputlar").append("<input id='pac-input" + count + "' class='controlsInput' type='text' placeholder='Enter your destination' /> <br />");
    var newInput = [];
    var newEl = document.getElementById('pac-input' + count);
    newInput[count-1] = newEl;
    setupAutocomplete(autocomplete, newInput, count-1);
    if (count === 7) {
        $("#addInputField").remove();
    }
});    

});

从initialize方法调用此函数,以维护多个输入上的自动完成。完美运作:

function setupAutocomplete(autocomplete,inputs,i) {

        autocomplete[i] = new google.maps.places.Autocomplete(inputs[i], autocompleteOptions);
        autocomplete[i].bindTo('bounds', map);

        google.maps.event.addListener(autocomplete[i], 'place_changed', function() {
          var infowindow = new google.maps.InfoWindow();
          if (marker[i] && marker[i].setMap) {
             marker[i].setMap(null);
             marker[i] = null;
          }
          marker[i] = new google.maps.Marker({
                map: map
          });  
          infowindow.close();
          marker[i].setVisible(false);
          var place = autocomplete[i].getPlace();
          if (!place.geometry) {
            return;
          }

          // If the place has a geometry, then present it on a map.
          if (place.geometry.viewport) {
            map.fitBounds(place.geometry.viewport);
          } else {
            map.setCenter(place.geometry.location);
            map.setZoom(17);  // Why 17? Because it looks good.
          }

          marker[i].setPosition(place.geometry.location);
          marker[i].setVisible(true);

          var address = '';
          if (place.address_components) {
            address = [
              (place.address_components[0] && place.address_components[0].short_name || ''),
              (place.address_components[1] && place.address_components[1].short_name || ''),
              (place.address_components[2] && place.address_components[2].short_name || '')
            ].join(' ');
          }

          infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
          infowindow.open(map, marker[i]);
        });
    }

最后的初始化方法:

 function initialize() {
      var mapOptions = {
        center: new google.maps.LatLng(40.4700, 50.0000),
        zoom: 10,
        zoomControl:true,
        zoomControlOptions: {
          style:google.maps.ZoomControlStyle.SMALL
        },
        mapTypeControl:true,
        mapTypeControlOptions: {
          style:google.maps.MapTypeControlStyle.DROPDOWN_MENU 
        }
      };
      map = new google.maps.Map(document.getElementById('map-canvas'),
        mapOptions);
      types = document.getElementById('type-selector');
      map.controls[google.maps.ControlPosition.TOP_LEFT].push(types);


      inputs = document.getElementsByClassName("controlsInput");
      for(var i = 0; i < inputs.length; i++) {  
       setupAutocomplete(autocomplete,inputs,i);
      }
      // Sets a listener on a radio button to change the filter type on Places
      // Autocomplete.
      function setupClickListener(id, types) {
        var radioButton = document.getElementById(id);
        google.maps.event.addDomListener(radioButton, 'click', function() {
          for (var i=0 ; i<autocomplete.length; i++) {
            autocomplete[i].setTypes(types);
          }
        });
      }

      setupClickListener('changetype-all', []);
      setupClickListener('changetype-establishment', ['establishment']);
      setupClickListener('changetype-geocode', ['geocode']);
    }

    google.maps.event.addDomListener(window, 'load', initialize);

</script>
</head>

和HTML:

<body>
    <table>
                <tr>
                    <td>
                        <div>
                            <div id="inputlar">
                            <input id="pac-input" class="controlsInput" type="text" placeholder="Marşrutunuzu haradan başlayırsınız" /> <br />
                            <input id="pac-input2" class="controlsInput" type="text" placeholder="Haraya gedirsiniz"> <br />
                            </div>  <br />
                            <input id="addInputField" type="button" value="Yolüstü dayanacaq əlavə et" class="styled-button-10"/>

                            <div hidden="hidden" id="type-selector" class="controls">
                              <input type="radio" name="type" id="changetype-all" checked="checked">
                              <label for="changetype-all">All</label>

                              <input type="radio" name="type" id="changetype-establishment">
                              <label for="changetype-establishment">Establishments</label>

                              <input type="radio" name="type" id="changetype-geocode">
                              <label for="changetype-geocode">Geocodes</label>
                            </div>
                        </div>
                    </td>
                    <td>
                        <div id="map-canvas" style="width:540px;height:380px;"></div>
                    </td>
                </tr>
            </table>
</body>
</html>
安托·尤尔科维奇(AntoJurković)

问题是setupAutocomplete()添加新元素后您不会调用您必须执行以下操作(可以使用jQuery进行改进):

$(document).ready(function(){
    var count = 2;
    $("#addInputField").click(function(){
        count++;
        console.log('add new input field');
        $("#inputlar").append("<input id='pac-input" + count + "' class='controlsInput' type='text' placeholder='Enter your destination' /> <br />");

        // added
        var newInput = [];
        var newEl = document.getElementById('pac-input' + count);
        newInput.push(newEl);
        setupAutocomplete(autocomplete, newInput, 0);

        if (count === 7) {
            $("#addInputField").remove();
        }
    });    
});

更新: jsbin上的示例setupAutocomplete()必须稍作更改,在此处留下注释的代码以查看不同之处,idx而不是使用parameter i

function setupAutocomplete(autocomplete, inputs, i) {

    // autocomplete[i] = new google.maps.places.Autocomplete(inputs[i], autocompleteOptions);
    autocomplete.push(new google.maps.places.Autocomplete(inputs[i], autocompleteOptions));
    var idx = autocomplete.length - 1;
    //autocomplete[i].bindTo('bounds', map);
    autocomplete[idx].bindTo('bounds', map);

    //google.maps.event.addListener(autocomplete[i], 'place_changed', function() {
    google.maps.event.addListener(autocomplete[idx], 'place_changed', function() {
    ...

注意:当您输入7个自动完成输入时,我没有检查会发生什么。也许您将需要进行一些更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google地方信息自动填充功能不适用于动态生成的输入元素

来自分类Dev

jQuery单击功能不适用于动态元素

来自分类Dev

单击功能不适用于动态创建的元素

来自分类Dev

Google Chrome自动填充功能不适用于所有计算机

来自分类Dev

自动完成功能不适用于克隆的输入元素

来自分类Dev

Javascript 单击功能不适用于自动打开

来自分类Dev

扩展功能不适用于动态对象

来自分类Dev

输入功能不适用于简单程序

来自分类Dev

Ajax自动填充不适用于动态字段,但适用于静态字段

来自分类Dev

Ajax自动填充不适用于动态字段,但适用于静态字段

来自分类Dev

lightgallery不适用于动态生成的元素

来自分类Dev

Twitter BootStrap确认不适用于动态生成的元素

来自分类Dev

change事件不适用于动态生成的元素-jQuery

来自分类Dev

工具提示不适用于动态生成的元素

来自分类Dev

Click事件不适用于动态生成的元素

来自分类Dev

.first()元素不适用于动态生成的<li>

来自分类Dev

工具提示不适用于动态生成的元素

来自分类Dev

为什么Google地方信息自动填充功能不会自动隐藏/显示?

来自分类Dev

为什么PyCharm的自动完成功能不适用于我安装的库?

来自分类Dev

vscode自动完成功能不适用于打字稿中的方法

来自分类Dev

DOXYGEN,Eclox:函数自动完成功能不适用于装饰宏

来自分类Dev

jQuery自动完成功能不适用于键值对数组

来自分类Dev

jQuery自动完成功能不适用于克隆

来自分类Dev

Materialize.css自动完成功能不适用于Polymer

来自分类Dev

Bash选项卡自动完成功能不适用于apt

来自分类Dev

物料自动完成功能不适用于InputProps

来自分类Dev

Rust自动补全功能不适用于某些板条箱

来自分类Dev

React Material UI自动完成功能不适用于Formik

来自分类Dev

Bash选项卡自动完成功能不适用于apt

Related 相关文章

  1. 1

    Google地方信息自动填充功能不适用于动态生成的输入元素

  2. 2

    jQuery单击功能不适用于动态元素

  3. 3

    单击功能不适用于动态创建的元素

  4. 4

    Google Chrome自动填充功能不适用于所有计算机

  5. 5

    自动完成功能不适用于克隆的输入元素

  6. 6

    Javascript 单击功能不适用于自动打开

  7. 7

    扩展功能不适用于动态对象

  8. 8

    输入功能不适用于简单程序

  9. 9

    Ajax自动填充不适用于动态字段,但适用于静态字段

  10. 10

    Ajax自动填充不适用于动态字段,但适用于静态字段

  11. 11

    lightgallery不适用于动态生成的元素

  12. 12

    Twitter BootStrap确认不适用于动态生成的元素

  13. 13

    change事件不适用于动态生成的元素-jQuery

  14. 14

    工具提示不适用于动态生成的元素

  15. 15

    Click事件不适用于动态生成的元素

  16. 16

    .first()元素不适用于动态生成的<li>

  17. 17

    工具提示不适用于动态生成的元素

  18. 18

    为什么Google地方信息自动填充功能不会自动隐藏/显示?

  19. 19

    为什么PyCharm的自动完成功能不适用于我安装的库?

  20. 20

    vscode自动完成功能不适用于打字稿中的方法

  21. 21

    DOXYGEN,Eclox:函数自动完成功能不适用于装饰宏

  22. 22

    jQuery自动完成功能不适用于键值对数组

  23. 23

    jQuery自动完成功能不适用于克隆

  24. 24

    Materialize.css自动完成功能不适用于Polymer

  25. 25

    Bash选项卡自动完成功能不适用于apt

  26. 26

    物料自动完成功能不适用于InputProps

  27. 27

    Rust自动补全功能不适用于某些板条箱

  28. 28

    React Material UI自动完成功能不适用于Formik

  29. 29

    Bash选项卡自动完成功能不适用于apt

热门标签

归档