我有一个带有DIV
s的网页,其中包含一个mouseover
用于显示弹出信息泡泡的处理程序.我不希望一次看到多个信息泡泡.但是当用户将鼠标快速移动到两个项目上时,我有时会得到两个气泡.这不应该发生,因为显示弹出窗口的代码会取消之前的弹出窗口.
如果这是一个多线程系统,那么问题就很明显了:有两个线程试图显示一个弹出窗口,它们都会取消现有的弹出窗口,然后弹出自己的弹出窗口.但我认为JavaScript总是运行单线程,这会阻止这一点.我错了吗?事件处理程序是异步运行的,在这种情况下我需要同步访问共享数据,还是应该在库代码中查找用于取消弹出窗口的错误?
编辑添加:
有问题的库是SIMILE Timeline及其Ajax库;
事件处理程序会调用SimileAjax.DOM.cancelEvent(domEvt)
,我假设根据名称取消事件的冒泡;
只是为了让事情变得更复杂,我实际上正在做的是开始超时,如果没有通过moustout
显示弹出窗口取消,这是为了防止弹出窗口烦人地闪烁但是烦人地产生相反的效果.
我还有另一个戳,看看我是否可以解决我出错的地方.:-)
是的,Javascript是单线程的.即使使用谷歌浏览器等浏览器,每个标签也有一个主题.
如果不知道如何从另一个弹出窗口取消弹出窗口,很难说出问题的原因是什么.
如果您的DIV彼此嵌套,则可能会出现事件传播问题.