问题是,当在 Android 键盘中打开单词建议时,Firefox 在键盘“猜测”单词期间不会触发键事件,尽管值被发送到文本字段。我会说这是 Firefox 中的一个错误,但我猜他们之所以选择这样做是因为如果键盘提示的内容与您编写的确切内容不同,则按下键的结果与字段获得的值不一致。
我通过使用嗅探器检查值是否已更改来解决此问题。
var $searchField;
var _keypressWatchingTimer = 0;
var _previousTerm = '';
function keypressStartWatching() {
keypressStopWatching();
_keypressWatchingTimer = setInterval(executeAutocomplete, 100);
}
function keypressStopWatching() {
if (_keypressWatchingTimer != 0) {
clearInterval(_keypressWatchingTimer);
_keypressWatchingTimer = 0;
}
}
function executeAutocomplete() {
var searchTerm = $searchField.val() || '';
if (_previousTerm == searchTerm)
return false;
searchApi.autocomplete(searchTerm);
_previousTerm = searchTerm;
}
function init() {
$searchField = $('#searchField')
.focus(keypressStartWatching)
.blur(keypressStopWatching)
.keyup(executeAutocomplete);
}
init();