首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅执行最后调用的函数

仅执行最后调用的函数
EN

Stack Overflow用户
提问于 2010-02-23 00:23:13
回答 2查看 126关注 0票数 2

这就是简而言之的设置。我有一张大桌子。每次单元格获得焦点时,都会完成对服务器的异步调用(使用PageMethods),并返回一些数据并更新页面中的infobox。我已经编写了代码,可以使用箭头keyes在单元格之间导航。当我在几个单元格中快速移动焦点以到达我想要的单元格时,问题就出现了。每次get-focus都会被执行,由于与服务器的通信需要大约半秒,这就变得相当恼人,而且对用户也不是很友好。理想情况下,我只想执行最后一个焦点事件。但是怎么做呢?我不知道哪个项目是最后一个项目,是吗?有谁有想法吗?

EN

回答 2

Stack Overflow用户

发布于 2010-02-23 00:55:05

保罗说得很对。

要在web上执行此操作,您需要将当前的焦点事件与javascript timing functions setTimeout和clearTimeout相结合:

代码语言:javascript
复制
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建议的那样,您可以尝试500ms的时间长度,以找到最适合您的情况的值。

票数 2
EN

Stack Overflow用户

发布于 2010-02-23 00:33:55

原则上,您需要一个短时间的计时器,它在焦点事件被引发时开始倒计时。如果在计时器超时之前发生另一个事件,则重新启动它,如果没有,则执行最后一个单元的OnFocus逻辑。

诀窍是使它足够短,以保持UI的响应性,但足够长,以避免触发对服务器的多个调用。

对你来说不幸的是,我不知道你如何在ASP.NET中做到这一点,但我已经在Winforms中为类似的情况做到了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2312305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档