Google maps api 3 谷歌将自动完成,在点击按钮时模拟第一个结果选择
我使用的是Google Places Autocomplete和Google Maps api。 在我的js中,我包装了自动完成的侦听器,以便在没有选择自动完成结果的情况下模拟“向下箭头”和“回车”事件的组合 请参见以下代码段:Google maps api 3 谷歌将自动完成,在点击按钮时模拟第一个结果选择,google-maps-api-3,autocomplete,Google Maps Api 3,Autocomplete,我使用的是Google Places Autocomplete和Google Maps api。 在我的js中,我包装了自动完成的侦听器,以便在没有选择自动完成结果的情况下模拟“向下箭头”和“回车”事件的组合 请参见以下代码段: var pac_input = document.getElementById('locatorPlaceSearch'); var orig_listener; (function pacSelectFirst(input) {
var pac_input = document.getElementById('locatorPlaceSearch');
var orig_listener;
(function pacSelectFirst(input) {
// store the original event binding function
var _addEventListener = (input.addEventListener) ? input.addEventListener : input.attachEvent;
function addEventListenerWrapper(type, listener) {
// Simulate a 'down arrow' keypress on hitting 'return' when no pac suggestion is selected,
// and then trigger the original listener.
if (type == "keydown") {
orig_listener = listener;
listener = function (event) {
var suggestion_selected = $(".pac-item-selected").length > 0;
if (event.which == 13 && !suggestion_selected) {
var simulated_downarrow = $.Event("keydown", {
keyCode: 40,
which: 40
});
orig_listener.apply(input, [simulated_downarrow]);
}
orig_listener.apply(input, [event]);
};
}
_addEventListener.apply(input, [type, listener]);
mapsListener = listener;
}
input.addEventListener = addEventListenerWrapper;
input.attachEvent = addEventListenerWrapper;
})(pac_input);
autocomplete = new google.maps.places.Autocomplete(pac_input,
{
componentRestrictions: { country: $('#hdnLocatorPlace').val() },
types: ['geocode']
});
现在我有一个“搜索”按钮,我想触发一个“向下箭头”和“回车”。我尝试了这段代码,但它没有在侦听器上触发keydown事件:
$('#searchAP').off('click').on('click', function (e) {
e.preventDefault();
e.stopPropagation();
setTimeout(function() {
$('#locatorPlaceSearch').focus();
$('#locatorPlaceSearch').click();
setTimeout(function() {
var sev = $.Event("keydown", {
keyCode: 13,
which: 13
});
//mapsListener.apply($('#locatorPlaceSearch'), [sev]);
$('#locatorPlaceSearch').trigger(sev);
},1000);
}, 1000);
//$('#locatorPlaceSearch').trigger(sev);
});
这段代码有什么问题?我无法确切地告诉您那里发生了什么,因为似乎根本不会触发事件(至少不会调用您的侦听器) 您可以使用本机DOM方法(
dispatchEvent
)触发事件:
google.maps.event.addDomListener(窗口'load',函数(){
var pac_input=document.getElementById('locatorPlaceSearch');
var orig_监听器;
(功能pacSelectFirst(输入){
//存储原始事件绑定函数
var _addEventListener=(input.addEventListener)?input.addEventListener:input.attachEvent;
函数addEventListenerWrapper(类型,侦听器){
//当未选择pac建议时,在点击“返回”时模拟按下“向下箭头”键,
//然后触发原始侦听器。
如果(类型==“键控键控”){
原始侦听器=侦听器;
侦听器=函数(事件){
所选var suggestion_=$(“.pac项已选定”)。长度>0;
如果(选择event.which==13&&!建议){
var模拟_向下箭头=$.Event(“向下键”{
密码:40,
哪个:40
});
orig_listener.apply(输入,[simulated_downarrow]);
}
orig_listener.apply(输入,[event]);
};
}
_apply(输入,[type,listener]);
mapsListener=监听器;
}
input.addEventListener=addEventListenerWrapper;
input.attachEvent=addEventListenerWrapper;
})(pac_输入);
autocomplete=new google.maps.places.autocomplete(pac_输入{
组件限制:{
国家:$('hdnLocatorPlace').val()
},
类型:['geocode']
});
$('searchAP')。关闭('click')。打开('click',函数(e){
var keydown=document.createEvent('HTMLEvents');
initEvent(“keydown”,true,false);
Object.defineProperty(keydown,'keyCode'{
get:function(){
返回13;
}
});
Object.defineProperty(向下键“which”{
get:function(){
返回13;
}
});
pac_输入。调度事件(键控);
});
});代码>
我无法确切地告诉您那里发生了什么,因为似乎根本不会触发事件(至少不会调用您的侦听器)
您可以使用本机DOM方法(dispatchEvent
)触发事件:
google.maps.event.addDomListener(窗口'load',函数(){
var pac_input=document.getElementById('locatorPlaceSearch');
var orig_监听器;
(功能pacSelectFirst(输入){
//存储原始事件绑定函数
var _addEventListener=(input.addEventListener)?input.addEventListener:input.attachEvent;
函数addEventListenerWrapper(类型,侦听器){
//当未选择pac建议时,在点击“返回”时模拟按下“向下箭头”键,
//然后触发原始侦听器。
如果(类型==“键控键控”){
原始侦听器=侦听器;
侦听器=函数(事件){
所选var suggestion_=$(“.pac项已选定”)。长度>0;
如果(选择event.which==13&&!建议){
var模拟_向下箭头=$.Event(“向下键”{
密码:40,
哪个:40
});
orig_listener.apply(输入,[simulated_downarrow]);
}
orig_listener.apply(输入,[event]);
};
}
_apply(输入,[type,listener]);
mapsListener=监听器;
}
input.addEventListener=addEventListenerWrapper;
input.attachEvent=addEventListenerWrapper;
})(pac_输入);
autocomplete=new google.maps.places.autocomplete(pac_输入{
组件限制:{
国家:$('hdnLocatorPlace').val()
},
类型:['geocode']
});
$('searchAP')。关闭('click')。打开('click',函数(e){
var keydown=document.createEvent('HTMLEvents');
initEvent(“keydown”,true,false);
Object.defineProperty(keydown,'keyCode'{
get:function(){
返回13;
}
});
Object.defineProperty(向下键“which”{
get:function(){
返回13;
}
});
pac_输入。调度事件(键控);
});
});代码>
第二种解决方案无法正常工作:如果我使用向下箭头,它将跳转到下面的1个选项。可能您需要添加相同的$(“.pac item selected”)选中此处。第二个解决方案无法正常工作:如果我使用向下箭头,它将跳转到下面的1个选项。您可能需要在此处添加相同的$(“.pac项已选定”)复选框。