1

jQuery UI ライブラリ バージョン 1.8.23 のオートコンプリート ウィジェットを使用しています。私のコードは次のようになります。

$(this).autocomplete({
     autoFocus: true,
     minLength: 2,
     delay:     100,
     source:    function(request, response) {AutoCpl.getSource(request, response)},
     select:    function(e, ui)             {AutoCpl.getSelect( e, ui, $(this) )},
     open:      function(e, ui)             {AutoCpl.setOpen($(this))}
});

100 ミリ秒の遅延の後、AJAX 呼び出しを使用して製品のリストを取得しています。すべて正常に動作しますが、フォーカス イベントに問題があります。選択リストにホバーしたときに製品の詳細を表示したい。大量のデータを計算する必要があるため、製品の詳細と製品リストを一度に返すことができません。後でフォーカス イベントでこれらの情報を取得するには、別の AJAX 呼び出しを使用する必要があります。誰かが 1 回のマウス移動ですべての製品にカーソルを合わせることができるため、AJAX 呼び出しを行ってすべての応答を表示することはできません。誰かが特定の製品の詳細を本当に見たいと思っていることを確認する必要があるため、その AJAX 呼び出しを行うのをしばらく待ちたいと思います。

Ben Alman による jQuery debouce プラグインを使用しようとしましたが、思いどおりに動作しません (または、使い方が間違っているだけかもしれません)。私がこの方法を試した場合:

focus:     $.debounce(1000, App.getProductsDetails)

イベントは 1 秒遅れました (問題ありません) が、getProductsDetailt では、イベントと ui オブジェクトにアクセスできませんでした。別の方法を試しました:

focus:     function(e, ui){$.debounce(1000, App.getProductsDetails)}

今回は getProductsDetails も呼び出されませんでしたが、あまり驚きませんでした。私の知る限り、デバウンス関数はイベントにバインドする必要があるためです。$('#id').click($.debounce()).

私の質問は、フォーカス イベントを遅らせると同時に、フォーカス イベントによって返されるオブジェクトにアクセスする方法を教えてください。

4

1 に答える 1

1

数時間の調査と試行の後、答えが見つかりました。

$.debounce 関数はすべての引数を渡しているため、AgetProductsDetails メソッドにパラメーターを追加するだけで済みました。

App = {
    getProductsDetails: function(e, ui){
        console.log(ui);
    }
}

したがって、このコード:

 focus:     $.debounce(1000, App.getProductsDetails)

よかった。debounce プラグインのドキュメントがヒントになりました。

あとで間違えた…

于 2013-02-05T18:19:05.097 に答える