2009-06-17 43 views
0

背景信息:
我有一个函数,当被调用时创建一个窗体中的选择列表并填充它。之后,脚本遍历列表中的选项并查找特定值。如果值在那里,脚本'选择'该选项。

问题:
由于是动态创建的列表和一些次非常大的,它需要一段时间来加载。发生这种情况时,脚本的第二部分(选择选项的部分)不会执行任何操作,因为选择列表尚未加载时间。

理念的解决方案:
什么是好的就是可以调用的函数在选择列表中的onload事件的第二部分(作为一个单独的功能)。但是选择列表不应该有一个onload属性。另一个想法是简单地加一个延迟,但有一天延迟可能不够长。

预先感谢任何帮助Javascript:脚本需要等待一个元素加载

+0

您是从服务器动态加载内容,还是由客户端上的本地javascript以编程方式生成内容。请澄清一点。 – SingleNegationElimination 2009-06-17 01:23:32

+0

该列表从服务器动态填充AJAX。我所需要做的就是等待列表填充,但是添加延迟并不好,我也不能真正添加​​一个监听器。 – VinkoCM 2009-06-17 01:46:25

回答

0

好的,我终于解决了这个问题。解决方案与此处讨论的完全不同。基本上,我使用'新的选项(价值,文本)'添加选项到我的清单。我最终抛出了一个if语句,当一个值等于我所需要的是使用新的选项(值,文本,真)。并解决了这个问题。所有在一天的工作。

1

使用的延迟是不可靠的。无论您使用什么来填充选择列表,应该在完成时直接调用该函数。

交替:

由于没有“的onload”事件选择所有你能真正做到它有一个超时后调用自身的函数。如果选择列表中的项目长度已从零更改,则知道当前正在添加项目(起点)。如果已经到达起点并且在下一次超时后没有任何变化,您可以假定项目已经停止添加到列表中,因此您可以运行第二个功能。

+0

这会是这样的: 1.设置超时 2.时间不足时调用一个函数,检查是否所有项目都已加载。 3.如果全部已经加载,运行功能2选择一个选项,否则设置超时并重复。 这是你的意思吗? – VinkoCM 2009-06-17 01:37:24

+0

是的。当列表长度停止改变时,您可以知道所有项目都已加载。 – 2009-06-17 13:47:14

0

为什么你不做选择选项回调函数的功能。它将在创建列表的函数结束时调用。例如。

function createList(onComplete) { 
// Create the list and maybe other tasks 
onComplete(); 
} 

注:可能不是这样的,但我认为你有这个想法......

1

你怎么做你的AJAX调用?大多数AJAX库将提供机制来成功完成回调。例如jQuery中:

$("#myList").load("ajax.url", function(){ 
    //your content has been loaded, so you can do your selection logic here 
}); 

如果手动&处理Ajax响应构建在JavaScript中的列表中,那么你已经有当列表完成一个知道的代码,所以你可以做的选择部分一旦完成,而不是一个单独的功能(如zyeming建议)。

如果这对你没有帮助,可能值得发布一些代码,这样人们可以给你一个更具体的答案。