2

テキスト入力で入力イベントをキャプチャしようとしています。jQueryを使用してkeyup、一致のリスト(オートコンプリートリスト)にデータを入力するイベントを処理しています。これは、ストックブラウザやMaxthonなどの他のブラウザでは正常に機能しますが、Firefox mobileでは、キーボードが表示されている間は何も起こりません。機能するには、Enterキーを押すかキーボードを非表示にする必要があります。

私はjQuery1.7.2、Android 2.3、および最新バージョンのFirefox(10だと思います)を使用しています。運が悪かったなど、他のイベントもinput試しました。keydown

キーボードが表示されている間にFirefoxmobileでキー/入力イベントを処理することは可能ですか?

4

1 に答える 1

2

問題は、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();
于 2013-01-08T09:47:37.703 に答える