Как адаптировать Event DOM Listener к Google Maps JavaScript API v3.35 - PullRequest
0 голосов
/ 21 декабря 2018

Раньше я использовал следующий код, чтобы перехватить событие ввода ключа пользователя и автоматически выбрать первый результат из результатов автозаполнения (pac-элементов), если пользователи не выбрали ни один из них (т. Е. Нет pac-элементов).помечен как pac-item-selected).

var input = document.getElementById('pac-input')
var autocomplete = new google.maps.places.Autocomplete(input)

google.maps.event.addDomListener(input, 'keypress', function(e) {
    if (e.keyCode===13 && !e.triggered) {
        var suggestion_selected = document.querySelectorAll('.pac-item-selected').length > 0
        if (!isLatLngInInputBox && !suggestion_selected) {
            google.maps.event.trigger(this,'keydown',{keyCode:40})
            google.maps.event.trigger(this,'keydown',{keyCode:13,triggered:true})
        }
    }
})

Однако при запуске из Google Maps JavaScript API v3.35 я получаю сообщение об ошибке типа Uncaught TypeError: a.stopPropagation is not a function в строке google.maps.event.trigger(this,'keydown',{keyCode:40}).

В результате я проверил документацию и заметил, что метод триггера google.maps.event изменился.Третий аргумент теперь обозначается как eventArgs, а не как var_args.

Я попытался выяснить, как адаптироваться к нему, и изменил код следующим образом:

google.maps.event.addDomListener(input, 'keypress', function(e) {
    console.log(e.key)
    if (e.key==="Enter" && !e.triggered) {
        var suggestion_selected = document.querySelectorAll('.pac-item-selected').length > 0
        if (!isLatLngInInputBox && !suggestion_selected) {
            google.maps.event.trigger(this,'keydown',{key:"ArrowDown"})
            google.maps.event.trigger(this,'keydown',{key:"Enter",triggered:true})
        }
    }
})

Хотя можно ввести клавишу Enterотлично, клавиша ArrowDown не работает должным образом.

На самом деле, я могу захватить клавишу ArrowDown с помощью console.log(e.key), но на самом деле ничего не происходит.Кроме того, console.log(e.key) ничего не ловит, когда я нажимаю клавишу ArrowDown на клавиатуре, что меня очень смущает.

Кто-нибудь сталкивался с подобной проблемой?Спасибо за любое предложение!

1 Ответ

0 голосов
/ 21 декабря 2018

Используйте new Event() для создания правильного объекта события в качестве третьего параметра, а также keydown вместо keypress в вашем addDomListener

var input = document.getElementById('pac-input')
var autocomplete = new google.maps.places.Autocomplete(input)
google.maps.event.addDomListener(input, 'keydown', function(e) {
  var suggestion_selected = document.querySelectorAll('.pac-item-selected').length > 0
  if (suggestion_selected) {
    console.log(document.querySelectorAll('.pac-item-selected'));
  } else {
    if (e.key === "Enter" && !e.triggered) {
      var ex1 = new Event('keydown');
      ex1.code = "ArrowDown";
      ex1.key = "ArrowDown";
      ex1.keyCode = 40;
      google.maps.event.trigger(this, 'keydown', ex1);

      var ex2 = new Event('keydown');
      ex2.code = "Enter";
      ex2.key = "Enter";
      ex2.keyCode = 13;
      ex2.triggered = true;
      google.maps.event.trigger(this, 'keydown', ex2);
    }
  }
});

Редактировать:

У меня есть рабочая скрипка https://jsfiddle.net/ergec/e6wsdb85/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...