如何将 Event DOM Listener 适配到 Google Maps JavaScript API v3.35

Cli*_*Yen 2 javascript google-maps-api-3

我曾经使用下面的代码来捕捉用户的 Enter 键事件,如果用户没有选择它们中的任何一个(即没有 pac-item 标记为 pac -项目选择)。

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})
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

但是,从 Google Maps JavaScript API v3.35 开始,我会Uncaught TypeError: a.stopPropagation is not a functiongoogle.maps.event.trigger(this,'keydown',{keyCode:40}).

结果查了一下文档,发现google.maps.event的trigger方法变了。第三个参数现在被声明为 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})
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

尽管 Enter 键可以完美捕获,但 ArrowDown 键无法按预期工作。

事实上,我可以用 捕获 ArrowDown 键console.log(e.key),但实际上什么也没发生。此外,console.log(e.key)当我按下键盘上的 ArrowDown 键时没有捕捉到任何东西,这让我很困惑。

有没有人遇到类似的问题?感谢您的任何建议!

Erg*_*gec 5

使用new Event()创建适当的事件对象作为第三个参数,也keydown代替keypressaddDomListener

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);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

编辑:

我在这里有一个工作小提琴https://jsfiddle.net/ergec/e6wsdb85/