1

我正在通过 jQuery 导入必要的文件,并且我想更新一些文本以显示正在加载的文件,但似乎导入是在文本更新之前完成的,无论指定的顺序如何。但是,控制台日志记录会按计划更新,即使它是在 import 语句之后调用的。我也尝试过这种方式的文本更新调用,但它也不起作用。

这是一段代码摘录:

var jsFiles = new Array('some js files');
var cssFiles = new Array('some css files');

for(var i = 0; i < jsFiles.length; i++) {
    $('#loadfile').text('imported js library `' + jsFiles[i]+'`');
    $('head').append('<script type="text/javascript" src="'+jsFiles[i]+'"></script>');
    console.log('imported js library `' + jsFiles[i]+'`');
}

for(var i = 0; i < cssFiles.length; i++) {
    $('#loadfile').text('imported css library `' + cssFiles[i]+'`');
    $('head').append('<link rel="stylesheet" media="screen" type="text/css" href="'+cssFiles[i]+'" />');
    console.log('imported css library `' + cssFiles[i]+'`');
}

我尝试设置超时,如果文本已更新,我还尝试将变量设置为 true,并在导入文件之前检查该变量是否为 true,但这只会使文件无法导入。

我还尝试使用document.getElementById调用来更新文本,但也没有骰子。javascript中是否有一些固有的东西可以设置语句的优先级,或者我只是忽略了一些东西?

4

1 回答 1

0

在大多数浏览器中,Javascript 在 GUI 线程上运行。当您的脚本被下载和阅读时,GUI 将不会更新,直到您的脚本插入完成。window.setTimeout 将允许 gui 在下载/插入脚本之前进行更新。

for(var i = 0; i < jsFiles.length; i++) {
    $('#loadfile').text('imported js library `' + jsFiles[i]+'`');
    window.setTimeout(function() {
        $('head').append('<script type="text/javascript" src="'+jsFiles[i]+'"></script>');
    }, 10);
    console.log('imported js library `' + jsFiles[i]+'`');
}

资料来源:JavaScript 似乎以错误的顺序执行代码

于 2013-02-12T21:38:06.207 回答