jqueryがロードされる前に実行されているonsscriptlories onscriptlariesをendance.jsライブラリ

StackOverflow https://stackoverflow.com/questions/4134464

質問

見る このデモ プログレッシブエンハンスメントを使用したフィラメントグループから Enhance.js 図書館

与えるために変更: -

<script type="text/javascript" src="../_shared/EnhanceJS/enhance.js"></script>
<script type="text/javascript"> 
// Run capabilities test
enhance({
loadScripts: [
 {src: 'js/excanvas.js', iecondition: 'all'},
 '../_shared/jquery.min.js',
 'js/visualize.jQuery.js',
 'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
] 
}); 

    alert($);

</script> 

おそらくJQueryがまだロードされていないため、アラートに「$は未定義のエラー」を取得します。

注 - アラート($)はデバッグ専用です - 私は$( 'selector') - $(ハンドラー)または$(document)または$(document)などで何かをしようとしています。 jQueryはロードされておらず、$は定義されていません。

Enhance's onscriptloaded それは彼がトリックするべきだと思うが、私が追加するなら

onScriptsLoaded:[runMyCode()]

以降

function runMyCode()
{
    alert("runMyCode was called");
    alert($);
}

最初のアラートは機能しますが、$はまだ定義されていません。

ボタンのクリックイベントでrunmycodeに電話すると、動作します。

質問は、すべてのスクリプトがentance.jsの読み込みが終了したら、どのようにコードを実行できますか?

PS IE8/FF3/CHROME7で検証された同じ問題

役に立ちましたか?

解決

私はこれがあなたが望んでいることだと思います、それはそれに注意してください onScriptsLoaded コールバックとして直接使用されます, 、したがって、それはアレイではなく関数でなければなりません:

enhance({
   loadScripts: [
    {src: 'js/excanvas.js', iecondition: 'all'},
    '../_shared/jquery.min.js',
    'js/visualize.jQuery.js',
    'js/example.js'
   ],
   loadStyles: [
    'css/visualize.css',
    'css/visualize-dark.css'
   ],
   onScriptsLoaded: function() { alert($); }
});

またはより一般的には、関数については、次のような参照のみを渡します。

   onScriptsLoaded: runMyCode

理由 onScriptsLoaded:[runMyCode()] 「一種の」作品です すぐに 呼び出す runMyCode 関数(この行が実行された時点で、 いいえ スクリプトが終了したとき)とその結果から配列を作成します。これは、スクリプトが終了すると実際にエラーが発生します。 onScriptsLoaded 配列ではなく、コールバック関数になると予想されます。

他のヒント

これは問題かもしれないと思います:

onScriptsLoaded:[runMyCode()]

試してみましたか(アレイ表記が正しいと仮定します):(編集 - そうです いいえ 正しい)

onScriptsLoaded: [runMyCode]

?最初の方法は、ライブラリをセットアップした時点で機能を呼び出しています。代わりに関数への参照だけを渡す必要があります。

編集 実際には次のようにする必要があります。

onScriptsLoaded: runMyCode

配列がどこから来たのかわかりません。 「Enhance.js」ドキュメントでは絶対に言及されていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top