在build议的单词提示时,按键事件不会在Android的Firefox中触发

我有一个search字段,在键入时触发自动完成search。 我有它触发键。 这在大多数浏览器中都能正常工作,但在Android上的Firefox上,这是行不通的。 键入事件似乎没有被触发。 只有在Android键盘设置中打开了单词build议,才会发生这种情况。

我在Googlesearch上看到,自动完成search在那里工作的设置相同,所以显然可以这样做。 我不知道怎么样? 这是我需要听取的特殊事件吗?

此外,我试图听取事件的变化,keydown和按键,但没有被触发。

HTML:

<input type="text" id="searchField" autocomplete="off" spellcheck="false" autocorrect="off" /> 

jQuery事件绑定:

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

注意:
有时,关键事件触发,这通常是一个不会导致形成单词的过程的关键。 这里最明显的是Enter ,它始终触发。 另一个是空间 ,它触发因为没有单词包含空格,因为空间是一个单词完成的定义。 如果删除的最后一个字符不在一个单词内, 退格触发。 这意味着如果你刚刚删除了一个单词的最后一个字母(所以它是字段的开始或光标跟在一个空格之后),但是如果你删除了光标仍然处于单词末尾的一些字符紧接着一封信。 基本上,如果按键导致键盘应用程序的某种单词build议,则不触发关键事件。

作为一个方面的说明,我可以说,一切工作正常在同一设备上的Chrome。

您可以使用input事件,而这在Android上的Firefox中适用于我。 您可以将事件处理程序绑定到inputinput事件以实现向后兼容,但是在大多数现代浏览器中,这两个事件都会触发:

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

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

我在另一个问题的答案中find了一个解决scheme。 问题是一个基本上“复制我dynamic写入页面的另一部分的文本”。 答案是支持通过非键盘操作捕捉更改,例如使用鼠标粘贴文本。 它是通过在文本字段中的焦点上启动一个嗅探器来解决的,它使用setInterval(...)检查值是否已经改变。 它清除计时器模糊。

这解决了我的问题,基本上是关键事件没有触发,以及“粘贴鼠标”的问题,我没有意识到是一个问题,直到我find了这个答案…!

这个工作,但我不知道我完全满意这个解决scheme,因为它使用嗅探器。 不pipe改变的原因是什么,我都会更喜欢使用某种事件,而这种事件是由价值观所引发的。 使用change事件将不起作用,因为直到焦点离开该字段才会触发该事件。

通过Android上的Firefox不触发关键事件的事实,也触发了一些奇怪的input事件(例如,如果按下一个键,则两个事件被触发,而且如果你离开,它也会触发input事件input)我不得不写我自己的事件:

 (function($){ var $event = $.event, $special = $event.special.fennecInput = { setup: function(){ $(this).on('input',$special.handler); }, teardown: function(){ $(this).off('input',$spceial.handler); }, handler: function(event) { var context = this, args = arguments, dispatch = function() { event.type='fennecInput'; $event.dispatch.apply(context,args); }; if($(context).val() != $(context).attr('data-fennecInput-oldval')){ dispatch(); $(context).attr('data-fennecInput-oldval',$(context).val()); } } }; })(jQuery); 

这个事件只有在input事件发生改变的时候才会触发,所以不会执行事件。