简而言之,这就是设置。我有一张大桌子。每次单元格获得焦点时,都会完成对服务器的异步调用(使用 PageMethods),并返回一些数据并更新页面中的信息框。我已经编写了可以使用箭头键在单元格之间导航的代码。当我快速将焦点转移到几个单元格以到达我想要的单元格时,就会出现问题。每个 get-focus 都会执行,并且由于与服务器的通信大约需要半秒钟,它会变得非常烦人并且不是非常用户友好。理想情况下,我只想执行最后一个焦点事件。但是怎么做?我不知道哪个事件是最后一个,可以吗?想法,有人吗?
问问题
128 次
2 回答
2
保罗是正确的。
要在网络上执行此操作,您可以将当前的焦点事件与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() 的调用是在调用将调用您的服务器的方法之前创建半秒的等待时间。如果在此计时器到期之前发生另一个焦点事件,则 clearTimeout() 调用将在另一个计时器启动之前取消当前计时器。正如 Paolo 建议的那样,您可以尝试 500 毫秒的时间长度,以找到最适合您情况的值。
于 2010-02-22T16:55:04.503 回答
1
原则上,您需要一个短时间的计时器,在引发焦点事件时开始倒计时。如果在计时器到期之前发生另一个事件,则重新启动它,如果没有,则对最后一个单元格执行 OnFocus 逻辑。
诀窍是让它足够短以保持 UI 响应,但又足够长以避免触发对服务器的多次调用。
不幸的是,我不知道如何为 ASP.NET 执行此操作,但我已经在 Winforms 中针对类似情况进行了此操作。
于 2010-02-22T16:33:54.740 回答