2009-12-22 44 views
0

我有一个典型的Ext Js样式窗口,带有左侧导航,标题和中心区域来显示内容。Ext Js Javascript执行

左侧导航有一堆菜单项,当点击加载一些东西时,通过Panel.Load()方法从指定的URL到中央面板。

我的问题是,在IE浏览器中,如果我点击很多菜单项太快,我得到各种javascript错误,我相信dom元素正试图被访问,不再存在,因为更新是在更新html的过程中。

有没有人遇到过这个问题,或者反正有一个新的加载请求启动后停止javascript执行。

我一直在使用这种尝试:

if(Ext.isIE) { 
     window.document.execCommand('Stop'); 
    } 
    else { 
     window.stop(); 
    } 

提前感谢!

回答

0

想到简单的解决方案:您可以创建一个全局变量来指示加载正在进行,并在点击菜单项后立即检查它。如果加载尚未进行,只能继续执行。

+1

是的,这是一个选项,但我不想停止用户活动。其中一页可能需要很长时间才能加载sday 5秒以上。如果他们点击这个意外的理想情况下,我只是想取消JavaScript和新的事件直接触发,否则系统可能会变得恼人的使用和缓慢的用户 – Jonnio 2009-12-22 17:07:30

2

处理过快点击的常见解决方案是buffer加载面板的点击处理代码,以便只在指定时间段内没有发生另一次点击时才会运行。例如:

item.on('click', function(){ ... }, this, {buffer:50}); 
+0

好吧可能工作的单个按钮,如果页面加载小于50毫秒。但是有很多菜单项。如果用户点击A然后B然后C并且会发生错误。此外,C可能需要5秒钟才能加载成为一个非常繁重的页面,所以我真的正在寻找一种方法来取消当前的负载,而不是触发新事件。 – Jonnio 2009-12-22 16:59:48

+0

我不确定你是否清楚如何缓冲工作。这个想法是,在你的例子中,如果A和B的点击速度比缓冲区阈值更快,那么它们将永远不会被加载,因此你不应该得到一个错误。当然,如果你有5秒钟的时间,并且用户在4秒钟后点击了其他东西,你将不得不分开处理。但我仍然认为缓冲可能会帮助您进行“快速点击”场景(当多次快速点击可能导致问题时,通常这是一种很好的方法)。 – 2009-12-23 05:23:37

+0

好吧,你的权利,我不清楚。这听起来像它可以帮助,但我不确定我可以如何应用这个手风琴项目点击。 – Jonnio 2010-01-15 09:58:33