2011-11-29 17 views
5

AutoFocusをtrueに設定してjQueryUIオートコンプリートを使用すると、入力が速すぎてEnterキーを押すと、一致しない場合でも入力したものが最初の選択で置き換えられます。jQueryオートコンプリートオートフォーカスが維持されない

たとえば、「app」と入力してスクロールするオートコンプリートの最初の選択肢が「apple」の場合、「applique」をすぐに入力してEnterキーを押し続けると、「applique」が「apple」 "

入力されたテキストがオートコンプリートの最初の選択に置き換えられる直前に、最初の選択がまだ入力されたテキストと一致するかどうかを確認する手段はありますか?

答えて

3

自動完成オプションの遅延を減らしてください。ローカルデータを使用している場合は、遅延を0に設定できます。デフォルトでは、300(ms)に設定されています。したがって、キーを押すと、マッチするデータセットを再評価する前に300msかかります。

したがって、基本的には最初のアイテムにオートフォーカスし、入力する前にリフィルする機会を与えていません。

また、最初のautoFocusの後に遅延中間ストリームを変更することもできます。だから、最初に提案を表示するために300ミリ秒待つと、フォーカスイベントでは、タイマーを0msに減らしてリストをより速くフィルタリングします。

リモートデータの場合、遅延0は問題を引き起こす可能性があるので注意してください。このようなものはうまくいく可能性があります。

$(".selector").autocomplete({ 
    delay: 300, 
    focus: function() { 
    $(".selector").autocomplete("option", "delay", 0); 
    }, 
    source: sourceData 
} 
0

私は遅いと知っていますが、これは私を狂っています。私は遅れを変えたいとは思っていませんでした。もし私がやったとしても、私はあまりにも速く入力すると、私は最後の文字を消去します。

は大きな頭痛の種の後、私は最善の解決策:)

があなたのjqueryの-UI-1.8.20.custom.jsを開きます(コードは、他のバージョンで動作しますを保証することはできません)、その後、これを見つけるを見つけましたライン:

   blur: function(event, ui) { 
       // don't set the value of the text field if it's already correct 
       // this prevents moving the cursor unnecessarily 
       if (self.menu.element.is(":visible") && 
        (self.element.val() !== self.term)) { 
        self.element.val(self.term); 
       } 
      } 

だけif statementこのようにすることをコメントアウト:

   blur: function(event, ui) { 
       // don't set the value of the text field if it's already correct 
       // this prevents moving the cursor unnecessarily 
       /*COMMENTING THIS IF OUT MAKES AUTOCOMPLETE STOP ERASING WHAT YOU TYPE 
       if (self.menu.element.is(":visible") && 
        (self.element.val() !== self.term)) { 
        self.element.val(self.term); 
       } 
       */ 
      } 

、すべてがうまくいく罰金:)

関連する問題