背景信息:
我有一个函数,当调用时创建一个表单内的选择列表并填充它。之后,脚本将运行列表中的选项并查找特定值。如果值存在,则脚本“选择”该选项。
的问题:
因为列表是动态创建的,并且有时非常大,所以加载需要一段时间。发生这种情况时,脚本的第二部分(选择选项的部分)不会执行任何操作,因为选择列表没有时间加载。
解决方案的想法:
什么是好的是在选择列表的onload事件中调用函数的第二部分(作为单独的函数)。但是选择列表不应该具有onload属性。另一个想法是简单地添加延迟,但有一天延迟可能不够长。
提前感谢您提供任何帮助
答案 0 :(得分:1)
使用延迟是不可靠的。无论您使用什么来填充选择列表,都应该在完成时直接调用该函数。
交替:
由于select is all没有“onload”事件,你可以真正做到它有一个在超时后调用自身的函数。如果选择列表中项目的长度已从零更改,则您知道当前正在添加项目(起始点)。如果已到达起始点并且在下一次超时后没有任何更改,则可以假设项目已停止添加到列表中,因此您可以运行第二个函数。
答案 1 :(得分: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所建议的那样)。
如果这对您没有帮助,可能值得发布一些代码,以便人们可以给您更具体的答案。
答案 2 :(得分:0)
为什么不使用选择选项的函数作为回调函数。它将在创建列表的函数末尾调用。 E.g。
function createList(onComplete) {
// Create the list and maybe other tasks
onComplete();
}
注意:可能不是这样但我认为你有这个想法......
答案 3 :(得分:0)
好的,我终于解决了这个问题。解决方案与此处讨论的完全不同。基本上,我使用'新选项(值,文本)'来添加选项到我的列表。我最后抛出了一个if语句,当一个值等于我需要的值时,使用了新的Option(value,text,true)。这解决了这个问题。所有这一切都在一天的工作中。