Google Address Api не отображает результаты поиска в IE9, но данные заполняются в адресные поля - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я тестирую Google API в браузере IE с помощью инструментов разработчика в режиме IE9. Результат поиска не отображается, но данные заполняются в адресных полях. Я потратил часы, чтобы попытаться отредактировать .pa c -контейнер и .pa c -элемент. Кажется, ничего не работает. Я мог бы изменить цвет, ширину выпадающего меню, используя контейнер pa c, элемент pa c, но адрес все еще не виден глазу пользователя, даже если данные были заполнены окончательно.

Я знаю, что API Google не поддерживается официально для IE9. Прежде чем мы сообщим всем нашим пользователям обновить их систему, я делаю это как временное решение.

Проблема, которую я вижу здесь, состоит в том, что раскрывающиеся данные не видны пользователю, поэтому я думаю, что изменение любого стиля css сделать его видимым, оставшиеся все функции работают нормально.

Search Result

Data populated after selection

<!DOCTYPE html>
<html>
  <head>
    <title>Place Autocomplete Address Form</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map {
        height: 100%;
      }
      /* Optional: Makes the sample page fill the window. */
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }  

<!-- .pac-item { -->
    <!-- display: block !important; -->
    <!-- font-size: 14px; -->
    <!-- color: #999 -->
<!-- } -->
    </style>


    <style>

      #locationField, #controls {
        position: relative;
        width: 480px;
      }
      #autocomplete {
        position: absolute;
        top: 0px;
        left: 0px;
        width: 99%;
      }
      .label {
        text-align: right;
        font-weight: bold;
        width: 100px;
        color: #303030;
        font-family: "Roboto";
      }
      #address {
        border: 1px solid #000090;
        background-color: #f0f9ff;
        width: 480px;
        padding-right: 2px;
      }
      #address td {
        font-size: 10pt;
      }
      .field {
        width: 99%;
      }
      .slimField {
        width: 80px;
      }
      .wideField {
        width: 200px;
      }
      #locationField {
        height: 20px;
        margin-bottom: 2px;
      }
      .pac-container {
        z-index: 10000 !important;
        display: block !important;
}

    </style>
  </head>

  <body>
    <div id="locationField">
      <input id="autocomplete"
             placeholder="Enter your address"
             onFocus="geolocate()"
             type="text"/>
    </div>

    <!-- Note: The address components in this sample are typical. You might need to adjust them for
               the locations relevant to your app. For more information, see
         https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
    -->

    <table id="address">
      <tr>
        <td class="label">Street address</td>
        <td class="slimField"><input class="field" id="street_number" disabled="true"/></td>
        <td class="wideField" colspan="2"><input class="field" id="route" disabled="true"/></td>
      </tr>
      <tr>
        <td class="label">City</td>
        <td class="wideField" colspan="3"><input class="field" id="locality" disabled="true"/></td>
      </tr>
      <tr>
        <td class="label">State</td>
        <td class="slimField"><input class="field" id="administrative_area_level_1" disabled="true"/></td>
        <td class="label">Zip code</td>
        <td class="wideField"><input class="field" id="postal_code" disabled="true"/></td>
      </tr>
      <tr>
        <td class="label">Country</td>
        <td class="wideField" colspan="3"><input class="field" id="country" disabled="true"/></td>
      </tr>
    </table>

    <script>
// This sample uses the Autocomplete widget to help the user select a
// place, then it retrieves the address components associated with that
// place, and then it populates the form fields with those details.
// This sample requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script
// src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">

var placeSearch, autocomplete;

var componentForm = {
  street_number: 'short_name',
  route: 'long_name',
  locality: 'long_name',
  administrative_area_level_1: 'short_name',
  country: 'long_name',
  postal_code: 'short_name'
};

function initAutocomplete() {
  // Create the autocomplete object, restricting the search predictions to
  // geographical location types.
  autocomplete = new google.maps.places.Autocomplete(
      document.getElementById('autocomplete'), {types: ['geocode']});

  // Avoid paying for data that you don't need by restricting the set of
  // place fields that are returned to just the address components.
  autocomplete.setFields(['address_component']);

  // When the user selects an address from the drop-down, populate the
  // address fields in the form.
  autocomplete.addListener('place_changed', fillInAddress);
}

function fillInAddress() {
  // Get the place details from the autocomplete object.
  var place = autocomplete.getPlace();

  for (var component in componentForm) {
    document.getElementById(component).value = '';
    document.getElementById(component).disabled = false;
  }

  // Get each component of the address from the place details,
  // and then fill-in the corresponding field on the form.
  for (var i = 0; i < place.address_components.length; i++) {
    var addressType = place.address_components[i].types[0];
    if (componentForm[addressType]) {
      var val = place.address_components[i][componentForm[addressType]];
      document.getElementById(addressType).value = val;
    }
  }
}

// Bias the autocomplete object to the user's geographical location,
// as supplied by the browser's 'navigator.geolocation' object.
function geolocate() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var geolocation = {
        lat: position.coords.latitude,
        lng: position.coords.longitude
      };
      var circle = new google.maps.Circle(
          {center: geolocation, radius: position.coords.accuracy});
      autocomplete.setBounds(circle.getBounds());
    });
  }
}
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=dummyKey&libraries=places&callback=initAutocomplete"
        async defer></script>
  </body>
</html>

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

После использования инструментов разработчика F12 для проверки выпадающих элементов кажется, что он заполняется API Google, поэтому, если вы хотите изменить его, вам может потребоваться переопределить API Google, это может быть очень сложно, и как В документе сказано, что поддержка Google Map JavaScript API IE 10 и 11. Итак, я думаю, что лучше обновить версию браузера IE до IE 11, это может быть Самый простой способ отображения предметов.

Кроме того, здесь есть еще один вариант, вы можете попробовать использовать AutocompleteService вместо Autocomplete, после получения прогнозов Autocomplete, вы можете вручную отфильтровать список результатов и использовать плагин автозаполнения для отображения элементов.

Пожалуйста, обратитесь к следующей ссылке, чтобы узнать, как получить прогнозы автозаполнения:

https://developers.google.com/maps/documentation/javascript/examples/places-queryprediction

0 голосов
/ 27 февраля 2020

С (текущая) документация (не включает IE9):

Поддерживаемые браузеры:

  • Текущая версия Microsoft Edge (Windows)
  • Inte rnet Explorer 10 и 11 (Windows; представление совместимости не поддерживается.)
  • Текущая и предыдущая версия Firefox (Windows, macOS, Linux)
  • Текущая и предыдущая версия Chrome (Windows, macOS, Linux)
  • Текущая и предыдущая версия Safari (macOS)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...