1

必要なファイルを jQuery 経由でインポートしています。どのファイルがロードされているかを示すテキストを更新したいのですが、指定された順序に関係なく、テキストが更新される前にインポートが行われているようです。ただし、インポート ステートメントのに呼び出されている場合でも、コンソール ログはスケジュールどおりに更新されます。この方法でテキスト更新呼び出しも試しましたが、どちらも機能しませんでした。

コードの抜粋を次に示します。

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 に答える