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