有效地将24k条目加载到选择列表中

时间:2011-12-20 21:05:08

标签: javascript javascript-events

我有一个经典的ASP页面,在加载时会调用另一个asp页面来检索XML以加载到我的框中。它必须加载大约24k选项;不用说,这是相当麻烦的。

它们并不都需要立即加载,只要页面不挂起,加载实际需要一段时间并不重要。该页面需要在ie6 +(无赖)中工作。

我已经考虑过,当用户滚动浏览一个给定的部分时,它会加载100多个,但是,找不到适合在ie6中用于滚动条位置的属性。我考虑使用特定选项的onmouseover(即“悬停以获得更多结果......”)但事件不会触发。

如果有人能指出我正确的方向,我真的很感激。产品:>

3 个答案:

答案 0 :(得分:1)

您应该使用服务器端支持的商店等设置延迟将商品加载到选择列表的服务。

如果我试图解决这个问题,我会沿着JsonRestStore路线走下去并使用Dojo Toolkit,根据需要请求项目,然后将它们填充到ComboBox / FilteringSelect中。

以下是一些资源供您使用。

http://livedocs.dojotoolkit.org/dojox/data/JsonRestStore

以下是Filtering Select可以做的演示。

正如最后一点,我可能会补充说,将所有这些加载到DOM中,总是一个坏主意。您应该使用网格或其他东西,或者在键入时使用预测器来缩小范围。

我使用JsonRestStore为网格提供大约500万个项目。我所做的就是在用户向下滚动页面时加载新项目。当它们滚动时,它会检测到我需要从服务器中提取另外25个项目,这将启动一个新查询,然后将其加载到网格中。

答案 1 :(得分:0)

通过"选择列表"我认为你的意思是HTML元素

<select>
  <option>option 1</option>
  ...
  <option>option 24000</option>
</select>

简而言之,选择列表中超过10-15个选项真的很难用。因此,如果这是你的情况,你可能想重新考虑这种互动,因为即使是火箭科学家也很难找到24000个选项中的正确选项。

答案 2 :(得分:-1)

对于任何绝对坚持使用下拉框执行此操作的人来说,唯一可以让它锁定浏览器的方法是使用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”),直到添加所有项目为止。