我正在使用JQuery的html()函数插入HTML和一些内联JavaScript。
看起来JQuery.html()是同步函数,但它不能保证内联脚本在继续执行之前已经完成。
例如:
$elem.html(some_html_with_inline_scripts);
function_that_relies_on_inline_scripts_done_executing();
不起作用是因为我的内联脚本在函数调用之后执行。
有没有什么办法解决这个问题?
我正在使用JQuery的html()函数插入HTML和一些内联JavaScript。
看起来JQuery.html()是同步函数,但它不能保证内联脚本在继续执行之前已经完成。
例如:
$elem.html(some_html_with_inline_scripts);
function_that_relies_on_inline_scripts_done_executing();
不起作用是因为我的内联脚本在函数调用之后执行。
有没有什么办法解决这个问题?
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增加到其他值。
<img>
或<iframe>
,那么可以使用$elem.on('load', function() {});
。 - yitwail
.html()
函数中不执行脚本,因为它本质上是一个高级版本的.innerHTML
。必须引入修复程序才能执行所有脚本。最好通过jQuery.getScript
包含脚本依赖项。 - zzzzBov