javascript 高效地将24k个条目加载到选择列表中

kb5ga3dv  于 2023-01-19  发布在  Java
关注(0)|答案(3)|浏览(91)

我有一个典型的ASP页面,当加载时,它会对另一个ASP页面进行JavaScript调用,以检索XML并加载到我的<select>框中。不用说,这相当麻烦。
它们并不需要立即加载,只要页面不挂起,加载是否需要一段时间也没关系,页面需要在IE6+下工作(真扫兴)。
我曾考虑过当用户滚动过一个给定的部分时,它将加载100个以上的内容,但是,找不到一个合适的属性,将在IE6中工作的滚动条位置。我曾考虑使用onmouseover的一个特定的选项(即“Hover for more results...”),但该事件没有触发。
如果有人能给我指出正确的方向,我将不胜感激。

pjngdqdw

pjngdqdw1#

您应该设置一个服务,使用类似于服务器端备份存储的方式将项目延迟加载到SelectList中。
如果我尝试解决这个问题,我会沿着JsonRestStore路线,使用Dojo工具包,在需要时请求项目,然后将它们填充到ComboBox/FilteringSelect中。
这里有一些资源给你。
http://livedocs.dojotoolkit.org/dojox/data/JsonRestStore
这里有一个Filtering Select的演示。
作为最后一点,我可能要补充的是,将所有这些都加载到DOM中始终是一个坏主意。您应该使用网格或其他东西,或者在输入时使用预测器来缩小范围。
我使用一个JsonRestStore,它支持一个大约有500万个条目的网格。我所做的就是在用户向下滚动页面时加载新条目。当用户向下滚动页面时,它检测到我需要从服务器上再拉取25个条目,这启动了一个新的查询,然后它被加载到网格中。

20jt8wwn

20jt8wwn2#

我想您所说的“选择列表”是指HTML元素

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

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

yr9zkbsy

yr9zkbsy3#

对于任何一个坚持使用下拉框的人来说,我唯一能让它不锁定浏览器的方法就是使用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”)来避免回流。

相关问题