ここでこの質問のいくつかのバージョンを見てきましたが、どれも私の問題と同じではないように見えるので、新しい質問を作成することにしました. 私はここで非常にばかげたことをしているに違いありませんが、私の人生ではそれを見つけることはできません.
特に関連性はありませんが、コンテキストから始めます。js コードを使用した jQuery のロードを延期しています。これは、$(document).ready(...)
"$" が最初のパスで未定義になるため、どのコード ファイルにも呼び出しを含めることができないことを意味します。代わりに、準備が整った関数を「グローバル」配列に追加し、jQuery が非同期でロードされた後、これらすべての関数を次のように呼び出します。
function FireLoadEvents() {
while ( OnLoadEvents.length > 0 ) {
var item = OnLoadEvents.splice(0,1);
item[0].ready();
}
}
これで、ページ コンポーネントのいずれかで、次を使用して、jQuery が読み込まれ、ドキュメントが実際に準備されたときに発生させたいイベントを追加できます。
OnLoadEvents.push( { ready: function() { ... } } );
OnLoadEvents
テンプレートの頭の一番上に変数を定義しました。
<script language="text/javascript">
var OnLoadEvents = new Array();
</script>
ご覧のとおり、関数スコープの外側にあり、参照される前にも宣言されています。単独でテストすると、この設定はうまく機能しますが、何らかの理由で実際のページ ヘッドに追加すると、ページの後半にあるスクリプト タグでOnLoadEvents
変数に項目を追加できません。たとえば、次は php-include サーバー側によってテンプレートに取り込まれ、これらの行がページの本文に追加されます。
<script type='text/javascript'>
OnLoadEvents.push( { ready: function() {
if ( $('.sponsor-link').length != 0 ) {
...
}
} } );
</script>
Chrome でこのページにアクセスすると、上記の「プッシュ」行で次の例外が報告されます。
Uncaught ReferenceError: OnLoadEvents is not defined
何が起こっているのですか?OnLoadEvents は、初期化した場所から数行下で未定義になるのはなぜですか? OnLoadEvents
として定義および参照も試みたことに注意してくださいwindow.OnLoadEvents
。
前もって感謝します!