1

オートコンプリートがありますが、テキストを入力して検索し、マウスをオートコンプリートの結果の上に移動すると、オートコンプリートのテキストが前の (削除) に変わります。この動作を改善する方法を知っている人はいますか。

jQuery.comで読んだ

フォーカス タイプ: オートコンプリート フォーカス

フォーカスが (選択ではなく) 項目に移動する前に、ui.item はフォーカスされた項目を参照します。フォーカスのデフォルト アクションは、テキスト フィールドの値をフォーカスされたアイテムの値に置き換えることですが、フォーカス イベントがキーボード インタラクションによってトリガーされた場合のみです。このイベントをキャンセルすると、値が更新されなくなりますが、メニュー項目がフォーカスされることは妨げられません。

フォーカスイベントをキャンセルする方法がわかりません。

4

5 に答える 5

1

デフォルトでは、jquery-ui のオートコンプリート ウィジェットは、マウス オーバー時に入力テキストを置き換えません。ただし、 http://jqueryui.com/demos/autocomplete/#custom-dataにある次のコードをコピーした場合:

1 $( "#project" ).autocomplete({
2     minLength: 0,
3     source: projects,
4     focus: function( event, ui ) {
5       $( "#project" ).val( ui.item.label );
6       return false;
7     },

それはまさにあなたが得るものです。この動作を望まない場合は、4 行目から 7 行目までの focus オプションを削除してください。

于 2012-07-19T12:12:12.447 に答える
1

おっしゃるとおり、jquery autocpmplete には [デモ ページ][1] にそのバグがあります。
テキストを入力し、オートコンプリートがいくつかの回答を表示した場合は、それを取得できます。次に、追加のテキストを追加し、同時に回答の1つにカーソルを合わせると、プログラムが追加のテキストをカットします。
オートコンプリートウィジェットでソースコードを確認できます

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);
           }
       }

そして、この行をコメントアウトすることで問題を把握できますがself.element.val(self.term); 、これはあまり良い考えではありません。jquery にバグを投稿できます。

于 2012-07-20T05:52:38.577 に答える
0

イベントのキャンセルは、呼び出しによって行われevent.preventDefault()ます (すべてのイベントをキャンセルできるわけではありません。チェックしてくださいevent.cancelable)。 https://developer.mozilla.org/en/DOM/event.preventDefault

于 2012-07-19T11:54:48.307 に答える
0

これにより、値が入力に設定され、フォーカスが削除されます

 $( "#to" ).autocomplete({
    source: availableTags,
    select: function (event, ui) {
    $( "#to" ).val( ui.item.label );
        $('#to').blur();
       return false ;
    }
});
于 2016-08-28T15:40:59.833 に答える