Google autocomplete API似乎没有通过鼠标将内容粘贴到文本输入中来激活。如果完全涉及键盘,它可以正常工作,但不能只用鼠标。
然而,我注意到,在将内容粘贴到文本输入后,它几乎可以从任何按键激活(经过测试的右箭头键,结束键,空格)。
您可以在autocomplete demo网站上重播。
这是一个错误吗?还是按照设计?如果按照设计,如何应用变通方法? 到目前为止,我已将此作为一种解决方法,但似乎没有模拟按键事件。
$('.txtLocation').bind("paste", function (e)
{
$('.txtLocation').focus();
var e = jQuery.Event("keydown");
e.keyCode = 39; //39=Arrow Right
$('.txtLocation').trigger(e);
});
答案 0 :(得分:6)
这似乎不仅会影响上下文菜单的粘贴,还会影响浏览器菜单栏中的编辑|粘贴以及iOS粘贴功能。我打开了bug with Google。您可能希望“明星”该错误报告以捕获更新。
我找到了一个解决方法,虽然有点黑客,但似乎解决了这个问题。如果存储粘贴的值,请将焦点切换到其他字段,在“自动填充”字段中设置值,最后重点关注“自动填充”字段,可以按预期方式工作。此外,您必须在setTimeout()
回调中执行此操作 - 延迟时间似乎根本不重要,但如果您只是内联执行,则无法看到预期结果。
以下是我上面描述的代码示例:
$("#address_field").on("paste", googleMapsAutocompletePasteBugFix);
googleMapsAutocompletePasteBugFix = function() {
return setTimeout(function() {
var field, val;
field = $("#address_field");
val = field.val();
$("#price").focus();
field.val(val);
return field.focus();
}, 1);
};
最后一个focus()
是可选的,但是如果你只是自动跳到下一个字段,那么UI就不那么令人惊讶了。
答案 1 :(得分:0)
以下解决方案似乎对我有用(存在以&#34结尾的字段;地址_2和#34;假设)。在IE8,IE9,IE10,Chrome,FF和Safari上进行了测试
if document.addEventListener
$(document).on("paste", "[name*=address_1]", @googleMapsAutocompletePasteBugFix)
$(document).on("onpaste", "[name*=address_1]", @googleMapsAutocompletePasteBugFix)
else
for element in $("input[name*=address_1]")
document.getElementById($(element).attr('id')).onpaste = @googleMapsAutocompletePasteBugFix
googleMapsAutocompletePasteBugFix: (e) ->
unless e
e = window.event
if e.srcElement
target = e.srcElement
else
target = e.target
field = $(target)
fieldId = field.attr('id')
focusSwitchFieldId = fieldId.replace(/(\d)$/, '2')
setTimeout(->
if window.chrome || /Safari/.test(navigator.userAgent)
val = field.val()
$("##{focusSwitchFieldId}").focus()
field.val(val)
field.focus()
else
field = document.getElementById(fieldId)
val = field.value
document.getElementById(focusSwitchFieldId).focus()
setTimeout(->
field.value = val
field.focus()
field.focus()
, 50)
, 10)