0

背景信息:
我有一个函数,在调用时会在表单内创建选择列表并填充它。之后,脚本将遍历列表中的选项并查找某个值。如果该值存在,则脚本“选择”该选项。

问题:
因为列表是动态创建的并且有时非常大,所以加载需要一段时间。发生这种情况时,脚本的第二部分(选择选项的部分)不会做任何事情,因为选择列表没有时间加载。

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

4

4 回答 4

2

你的 AJAX 调用怎么样?大多数 AJAX 库将提供在成功完成时执行回调的机制。例如在 jQuery 中:

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

如果您正在手动处理 ajax 响应并在 javascript 中构建列表,那么您已经拥有知道列表何时完成的代码,因此您可以在完成后执行选择部分,而不是作为单独的函数(就像zyeming建议的那样)。

如果这对您没有帮助,则可能值得发布一些代码,以便人们可以为您提供更具体的答案。

于 2009-06-17T02:20:11.983 回答
1

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

交替:

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

于 2009-06-17T01:23:55.730 回答
0

为什么不将选择选项的函数设为回调函数。它将在创建列表的函数末尾调用。例如

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

注意:可能不是这样,但我想你已经明白了......

于 2009-06-17T01:53:48.103 回答
0

好的,我终于解决了这个问题。该解决方案与这里讨论的完全不同。基本上,我使用“新选项(值,文本)”将选项添加到我的列表中。我最终抛出了一个 if 语句,当一个值等于我需要的值时,我使用了 new Option(value, text, true)。这解决了问题。一天的工作。

于 2009-06-19T02:11:48.820 回答