当启用单词建议时,关键事件在Android上的Firefox中不会触发

awe*_*awe 9 html javascript firefox jquery android

我有一个搜索字段,可以在键入时触发自动完成搜索.我有它在键盘上触发.这在大多数浏览器中都能很好地工作,但在Android上的Firefox中,这不起作用.在键入时似乎没有触发keyup事件.只有在Android键盘设置中启用了单词建议时才会出现这种情况.

我在谷歌搜索上看到自动完成搜索在那里进行相同的设置,所以显然可以做到.我好奇怎么样?这是一个特殊的事件我需要听这个工作吗?

此外,我试图听取事件更改,keydown和按键,但没有触发.

HTML:

<input type="text" id="searchField" 
 autocomplete="off" spellcheck="false" autocorrect="off" />
Run Code Online (Sandbox Code Playgroud)

jQuery事件绑定:

  $('#searchField').keyup(function (e) {
    var searchValue = $(this).val();
    searchApi._executeAutocomplete(searchValue);
  });
Run Code Online (Sandbox Code Playgroud)

注:
有时,关键事件触发,这通常是打一个关键并不导致形成一个单词的过程.这里最明显的是Enter,它总是会触发.另一个是Space,触发因为没有单词包含空格,因为空格是完成单词的定义.如果删除的最后一个字符不在单词内,Backspace触发.这意味着如果你刚刚删除了一个单词的最后一个字母(因此它是字段的开头,或者光标跟在一个空格后面),它会触发,但是如果你删除光标仍在的单词末尾的某些字符则不会触发紧接着一封信.基本上,如果按键导致键盘应用程序发出某种单词建议,则不会触发按键事件.

作为旁注,我可以说Chrome在同一台设备上运行正常.

ger*_*iwi 13

您可以使用该input事件,这对我在Android上的Firefox中有用.您可以将事件处理程序绑定到两者inputkeyup事件以实现向后兼容,但在大多数现代浏览器中,这将同时触发:

$('#searchField').bind('input keyup', function(e){
    var searchValue = $(this).val();
    searchApi._executeAutocomplete(searchValue);
});
Run Code Online (Sandbox Code Playgroud)

示例:http: //jsfiddle.net/JQ928/3/

  • 这里只是警告一下:一些浏览器会执行两次事件处理程序这一事实并不一定是一件小事,特别是当您触发 Ajax 请求时(如上面的示例),因为这意味着冗余的网络请求。我刚刚在 Android 4.4.4 的 Nexus 5 上运行的 Google Chrome 中注意到此问题。 (2认同)