当使用JQuery.html()时,内联脚本何时执行?

3

我正在使用JQuery的html()函数插入HTML和一些内联JavaScript。

看起来JQuery.html()是同步函数,但它不能保证内联脚本在继续执行之前已经完成。

例如:

$elem.html(some_html_with_inline_scripts);
function_that_relies_on_inline_scripts_done_executing();

不起作用是因为我的内联脚本在函数调用之后执行。

有没有什么办法解决这个问题?


旧版本的jQuery在.html()函数中不执行脚本,因为它本质上是一个高级版本的.innerHTML。必须引入修复程序才能执行所有脚本。最好通过jQuery.getScript包含脚本依赖项。 - zzzzBov
1个回答

0
这个解决方法怎么样?
var scripts_loaded = false; //set this true at end of some_html_with_inline_scripts
$elem.html(some_html_with_inline_scripts);

function are_scripts_loaded() {
 if (scripts_loaded) {
  clearInterval(intid);
  function_that_relies_on_inline_scripts_done_executing();
 }
}
var intid = setInterval(are_scripts_loaded, 10);

这会每10毫秒测试一次脚本是否已加载。您可能希望将其从10增加到其他值。


那是一个丑陋的解决方法。不幸的是,我想不到更好的办法。 - John Dvorak
1
如果它很漂亮,你就不会称它为解决方法了。如果要加载的元素具有URL,例如<img><iframe>,那么可以使用$elem.on('load', function() {}); - yitwail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接