2010-02-22 53 views
2

的函數簡而言之就是這個設置。 我有一張大桌子。每當單元格獲得焦點時,服務器的異步調用完成(使用PageMethods),並返回一些數據並更新頁面中的信息框。 我已經編寫了代碼,可以使用箭頭鍵在單元格之間導航。 當我通過幾個單元格快速移動焦點以便到達我想要的單元格時,會發生此問題。每個獲得焦點都會被執行,並且由於與服務器的通信需要大約半秒鐘的時間,所以它會變得非常令人不快,並且不太方便用戶。 理想情況下,我只想執行最後一次焦點事件。但是如何?我不知道哪一個事件是最後一個,我可以嗎? 想法,任何人?只執行最後一個叫做

+0

@Magnus - 我已經重申了你的問題,讓更多的人有機會找到它。 – Paolo 2010-02-22 16:28:45

+0

by cells你的意思是你有文本框? – 2010-02-22 17:10:41

回答

1

原則上你需要一個短時間的計時器,當焦點事件發生時開始倒計時。如果在計時器到期之前發生另一個事件,那麼你重新啓動它,如果沒有,那麼你對最後一個單元格執行OnFocus邏輯。

訣竅是使其足夠短,以保持UI的感覺響應,但足夠長的時間以避免觸發多次調用服務器。

不幸的是,我不知道你是怎麼做到這一點的ASP.NET,但我已經在類似情況下在Winforms中完成了它。

2

保羅是正確的。調用方法是將前

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()的調用創建一個半秒鐘的等待時間:

爲此在網絡上您會在目前的焦點事件與javascript timing functions setTimeout和clearTimeout結合打電話給你的服務器。如果在該定時器到期之前發生另一個焦點事件,clearTimeout()調用將在另一個啓動之前取消當前定時器。正如Paolo所建議的那樣,您可以嘗試500毫秒的時間長度來找到最適合您情況的值。