2

要するにセットアップです。私は大きなテーブルを持っています。セルがフォーカスを取得するたびに、サーバーへの asyncron 呼び出しが (PageMethods を使用して) 実行され、一部のデータが返され、ページ内のインフォボックスが更新されます。矢印キーを使用してセル間を移動できるようにするコードを作成しました。問題は、目的のセルに到達するために複数のセルをすばやくフォーカスを移動すると発生します。すべての get-focus が実行され、サーバーとの通信に約 0.5 秒かかるため、非常にイライラし、ユーザー フレンドリーではありません。理想的には、最後のフォーカス イベントのみを実行したいと考えています。しかし、どのように?どのイベントが最後のイベントかわかりません。アイデア、誰か?

4

2 に答える 2

2

パオロは正しいです。

Web 上でこれを行うには、現在のフォーカス イベントをJavaScript タイミング関数setTimeout および clearTimeoutと組み合わせます。

var timer; // timer variable in scope for other functions

var onFocus = function() {
  clearTimeout(timer);
  timer = setTimeout("makePageMethodCall()", 500);
}

var makePageMethodCall = function() {
  // make ajax call to your PageMethod function
}

setTimeout() への呼び出しは、サーバーへの呼び出しを行うメソッドを呼び出す前に、0.5 秒の待機時間を作成しています。このタイマーが期限切れになる前に別のフォーカス イベントが発生した場合、clearTimeout() 呼び出しは、別のタイマーが開始される前に現在のタイマーをキャンセルします。Paolo が推奨するように、500 ミリ秒の時間の長さを試して、状況に最適な値を見つけることができます。

于 2010-02-22T16:55:04.503 に答える
1

原則として、フォーカス イベントが発生したときにカウント ダウンを開始する短い期間のタイマーが必要です。タイマーが切れる前に別のイベントが発生した場合は、それを再開します。そうでない場合は、最後のセルが何であれ、OnFocus ロジックを実行します。

秘訣は、UI の応答性を維持するのに十分な長さにする一方で、サーバーへの複数の呼び出しをトリガーしないように十分に長くすることです。

残念ながら、ASP.NETでこれを行う方法はわかりませんが、同様の状況でWinformsで行いました。

于 2010-02-22T16:33:54.740 に答える