2

まだ初期化されていないからです。alert()を入力すると、ブラウザーを解放して要素を初期化できます。問題は、アラートボックスを使用せずに要素を初期化するように強制するにはどうすればよいですか?

関連するコードは次のとおりです...

$().ready(function() { AJAX_LoadResponseIntoElement ("mybody", "skin1.txt"); AJAX_LoadResponseIntoElement ("contentdiv", "index.txt"); initPage(); });

AJAX_LoadResponseIntoElement(id、file)は、XMLHTTPRequestを使用して「ファイル」をフェッチし、それをidのinnerHTMLにロードするだけです。

initPage()は、setContentHeight()を呼び出すまで機能します。これは、この時点まで機能します。

if (DOMheight > y_lbound) { document.getElementById('containerdiv').style.height = (DOMheight+container_ymod) + 'px'; }

この行の前に置くalert(document.getElementById('containerdiv'));と、「containerdiv」要素がAJAX_LoadResponseIntoElementの最初の呼び出しでロードされているはずなのに、NULLであると表示されます。

この行の前に2つのコピーを置くと、最初のコピーはNULLを示し、2番目のコピーは「[ObjectHTMLDivElement]」を示しますalert(document.getElementById('containerdiv'));

明らかに、それは「containerdiv」が初期化されていないという問題にすぎません。

繰り返しになりますが、問題は、alert()を使用せずに、XMLHTTPRequestによってフェッチされた後にこれらの要素の初期化を強制するにはどうすればよいかということです。

4

1 に答える 1

4

内部AJAX_LoadResponseIntoElement()で使用しているため、非同期のようです。XMLHTTPRequest問題を解決する1つの方法は、その関数を変更して、コールバック関数の引数を取り、要求が成功したときに呼び出すようにすることです。

function AJAX_LoadResponseIntoElement(elementId, fileName, callback)
{
    // Issue XMLHTTPRequest and call 'callback' on success.
}

次に、次のように変更された関数を使用します。

$(document).ready(function() {
    AJAX_LoadResponseIntoElement("mybody", "skin1.txt", function() {
        AJAX_LoadResponseIntoElement("contentdiv", "index.txt", initPage);
    });
});
于 2011-01-28T10:42:11.450 に答える