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'));这行之前,它会说它是 NULL,即使“containerdiv”元素应该在第一次调用 AJAX_LoadResponseIntoElement 时加载。

如果我在这一行之前放了两个副本alert(document.getElementById('containerdiv'));,第一个说 NULL,第二个说“[Object HTMLDivElement]”。

那么显然,这只是“containerdiv”没有被初始化的问题。

所以,再一次,问题是如何在被 XMLHTTPRequest 获取后强制初始化这些元素,而不使用 alert()?

4

1 回答 1

4

这似乎AJAX_LoadResponseIntoElement()是异步的,因为它在XMLHTTPRequest内部使用。解决问题的一种方法是修改该函数,使其接受回调函数参数并在请求成功时调用它:

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 回答