1

jQueryを使用してWebページを開発していますが、すべてのJavaScriptファイルが完全にロードされた後にのみコードを実行したいと考えています。head私のHTMLのセクションには、次のスクリプトがあります。

<script src="supervisor/lib/jquery-1.6.min.js" type="text/javascript"></script>

jQueryファイル内に、次のコードを挿入しました。

$.getScript('functions.js', function () {
  // code here
});

ファイルfunctions.jsには次のコードがあります。

$.getScript('mask.js');
$.getScript('validations.js');
$.getScript('lotsofscripts.js');
// and more...

ここの最初のコード$.getScript()は、他のすべてのJSがロードされた後にのみ実行されるようにしたいのですが、これは発生しません。これを達成するための最良の方法は何ですか?

PS:分離しやすいのでたくさん使っていますが$.getScript()、同じファイル内に挿入したいです。

4

4 に答える 4

2

いつでもカウンターをインクリメントできます。そうすれば、getScript呼び出しは非同期のままになります。これは、最後に変更することです。そして率直に言って、スクリプトを並行してロードし、後でいくつかの関数を実行するために見つけたパッケージ化されたソリューションは、おそらくこれのより輝かしいバージョンになります。

var counter = 0;
var filesToLoad = ["mask.js", "validations.js", "lotsofscripts.js"];
var filesCount = filesToLoad.length;

// Increment counter each time a getScript completes
function incrementCounter() {
  if (++counter === filesCount) {
    // This code will execute after everything loads
  }
}

// Iterate through the files and run getScript on them,
// with incrementCounter as the callback
for (var i = 0; i < filesCount; i++) {
  $.getScript(filesToLoad[i], incrementCounter);
}

これがjsFiddleの例です。

于 2011-06-03T20:26:55.783 に答える
1

jsスクリプトで定義された関数の名前を知っていて、それがロードされているかどうかをテストする必要があると仮定します...

私はUnderscore.jsisFunction()を使用してこれを理解しています(http://documentcloud.github.com/underscore/#isFunction

たとえば、script.jsに関数myScriptFunction()が含まれている場合、以下をチェックする関数を記述できます。

if (_.isFunction(myScriptFunction)) {
  // script.js is loaded
  // OK to move on to the next step
} else {
  // script.js is not loaded
  // check again later
}

イベントにバインドしてjsスクリプトファイルがロードされているかどうかを確認しようとしましたが、すべてのブラウザーで機能するわけではないようです。

于 2011-06-03T20:13:22.163 に答える
1

HeadJSにJSファイルをロードすることをお勧めします。特定のファイルまたはファイルのグループの完了時に特定のコードを実行できます。見てください、それは素晴らしい小さなプロジェクトです。

于 2011-06-03T20:22:40.577 に答える
-1

代わりにjQuery.ajax()を使用することをお勧めします。asyncオプションをfalseに設定できます(getScriptを使用する場合はデフォルトでtrueです

于 2011-06-03T20:04:47.597 に答える