我有一个经典的ASP页面,当加载时,它会调用另一个asp页面的javascript来检索要加载到我的框中的XML。它必须加载大约24k个选项;不用说,这相当麻烦。
它们并不都需要立即加载,只要页面不挂起,实际上是否需要一段时间加载都无关紧要。该页面需要在ie6+ (bummer)中工作。
我考虑过,当用户滚动经过一个给定的部分时,它将加载100多个部分,但是,找不到一个合适的属性来在ie6中为滚动条位置工作。我考虑使用onmouseover的特定选项(即“悬停更多结果...”)但是该事件不会触发。
如果有人能给我指出正确的方向,我将不胜感激。:>
发布于 2011-12-23 22:24:13
对于任何使用下拉框做这件事的人来说,唯一能让它不锁住浏览器的方法就是使用setTimeouts。在chrome中,这运行得很好,但IE可以接受的最低超时是13MS左右,这确实会阻碍加载时间。最重要的是,我(个人)认为这是一个相当丑陋的解决方案…但我想,这总比锁定表单要好。
var i = 0;
function doStuff()
{
// code to execute, ie, add items
i++;
if (i != end of loop)
{
setTimeout(doStuff, 1);
}
setTimeout(doStuff, 1);
我发现的另一个建议是通过使用代码片段或隐藏下拉框(简单地将style.display设置为"none")来避免回流,直到所有项都添加完毕。
发布于 2011-12-21 05:12:38
您应该设置一个服务,使用类似于服务器端支持的存储将您的项目延迟加载到Select列表中。
如果我要尝试解决这个问题,我会沿着JsonRestStore路线走下去,使用Dojo Toolkit在需要时请求项,然后将它们填充到组合框/筛选选择中。
这里有一些给你的参考资料。
http://livedocs.dojotoolkit.org/dojox/data/JsonRestStore
下面是Filtering Select功能的演示。
作为最后一点,我可能会补充说,将所有这些加载到DOM中总是一个坏主意。你应该使用网格之类的东西,或者在他们输入的时候使用预测器来缩小范围。
我使用的是JsonRestStore,它为一个有大约500万个项目的网格提供动力。我所要做的就是在用户向下滚动页面时加载新项目。当它们滚动时,它检测到我需要从服务器中提取另外25个项目,这将启动一个新的查询,然后将其加载到网格中。
发布于 2011-12-21 05:11:23
我假设您所说的“选择列表”指的是HTML元素
<select>
<option>option 1</option>
...
<option>option 24000</option>
</select>
简而言之,选择列表中超过10-15个选项是非常糟糕的可用性。因此,如果这是你的情况,你可能想要重新考虑交互作用,因为即使是火箭科学家也很难从24000个选项中找到并选择正确的选项。
https://stackoverflow.com/questions/8581974
复制相似问题