2012-01-04 54 views
0

我正在开发基于JavaScript的应用程序,并且继续遇到似乎是生产者/消费者问题(它发生在IE和Firefox中)的问题。表单按钮在javascript中覆盖超时事件

:项目描述:

有两个div(A和B)的页面。一个函数被安排超时在两个div之间每N秒翻转一次。

divs B有一个窗体中的按钮。按钮有一个点击回拨设置给他们 - 回调重置(刷新)表单。

:实施Bug /问题:

当DIV乙显示器和一个用户点击的按钮多次,函数(超时调度)翻转两个div似乎从未执行。如果它确实执行,则显示内容如此快速地显示,就好像超时从未被调用一样。

我试过使用全局范围的状态变量来控制何时按下按钮应该关闭,但似乎并不奏效。任何意见或建议是值得欢迎的!谢谢!

想象每个之间2秒的窗口,下图说明了如何将其与没有的onclick鼠标事件的工作原理:

seconds 0 2 4 6  
     +----+----+----+ 
divs A B A B 

注:顶行是2秒的时间间隔,该底行是DIV翻转事件

用鼠标点击事件应该做这样的事情(A定于4秒究竟发生):

seconds 0 2 4 6 
     +----+----+----+ 
divs A BBBBBA B 

它目前做:

seconds 0 2 4 6.... 
     +----+----+----+.... 
divs A BBBBBBBBBBB.... 

的调度的事件从未发生过。

+0

你能提供一个例子来说明这个问题? – 2012-01-04 22:00:42

+0

请显示show html和JS。你是说表单按钮只是刷新表单(无论是使用Ajax还是根本没有服务器请求),还是刷新整个页面(这会清除超时)? – nnnnnn 2012-01-04 22:07:40

+0

好的,感谢您花时间提供插图,但如果您也可以回复我以前的评论? – nnnnnn 2012-01-04 23:09:37

回答

1

我想你错过了使用clearTimeout或者您可能正在清除计时器而不是安排它回来。

我很快试图模拟你描述的内容。我不知道这是否是你想要的,但检查我的

Old DEMO这里(越野车型时多次点击,请参阅下面的链接)

我使用的setTimeout调用的函数。尝试使用setInterval,它将每隔n秒执行一次。

编辑:我固定的,我在我以前的演示错过了一个错误,请参阅下面的链接,让我知道,如果它是接近你想要什么。

DEMO

+0

感谢您的演示代码 - 它是现货。所以当程序第一次执行时,只需点击“点击我”按钮并继续点击它。直到停止点击后,div才会消失。 – 2012-01-05 15:41:45

+0

哦,通过点击我的意思是它正在模拟问题 - 我的道歉。 – 2012-01-05 16:13:19

+0

查看我的新演示链接,我想我在我的prev演示中犯了一个错误。 – 2012-01-05 16:15:13