私はかなり奇妙な問題に遭遇しました。
#
HTMLでajax(正確にはjQueryロード)コンテンツを使用してWebサイトを作成しましたが、すべて正常に機能しましたが、主にGoogleダイナミックリンクのSEOの問題のため、PHPに書き直す必要がありました。いずれにせよ、以下のスクリプトでオンデマンドで実行されるスクリプトは、表示されている順序で機能しません。しかし、リンクがロードされ、メインスクリプトがこの特定のリンクに使用される必要なスクリプトをオンデマンドで呼び出すときに機能するため、コードは非常に優れているよう#!
です。メインスクリプトファイルでそれらを一度に呼び出しても、仕事する!この現象の例:
function getalljs() {
getJs("js/vertical.js","js");
getJs("js/steps.js","js");
getJs("js/animatesteps.js","js");
}
そこでは別の奇妙なことが起こっています。以下に記述されているのと同じ方法でロードされたオンデマンド スクリプトの 1 つは実際にはロードされますが、jQuery はロードされません (背景アニメーションが含まれています)。
それらは私のスクリプトです:
この関数は、コンテンツのフェードアウト、新しいコンテンツの読み込み、URL ハッシュとフェードインの変更に使用されます。
function loadajax(toLoad, rest, div, js) {
window.location.hash = toLoad;
div.fadeOut(150, loadContent);
function loadContent() {
contentload(toLoad, rest, div, js);
reappear();
}
function reappear() {
div.fadeIn(1000);
}
return false;
}
お気づきかもしれませんが、別の関数を呼び出しています。この関数は、jQuery ロードを使用して html をロードするために使用されます。
function contentload(fragment, rest, div, js) {
fragment = fragment.slice(1).replace('!', '')
div.load((fragment + rest), getJs(js, "js"));
}
はい、これはさらに別のものを呼び出して、新しくロードされたコンテンツで使用される Javascript を取得します。
function getJs(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
}
else if (filetype=="css"){ //if filename is an external CSS file
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
これを実行に移すコードは次のとおりです。
$("#horizontal_cssmenu a").click(function () {
var div = $('#contentsth');
var toLoad = $(this).attr('href');
var rest = '?ajax=1';
var javka = 'js/vertical.js';
loadajax(toLoad, rest, div, javka);
return false;
});