jqueryがロードされる前に実行されているonsscriptlories onscriptlariesをendance.jsライブラリ
-
30-09-2019 - |
質問
見る このデモ プログレッシブエンハンスメントを使用したフィラメントグループから 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」ドキュメントでは絶対に言及されていません。