2011-01-28 99 views
2

这是因为它尚未初始化。如果我放入alert(),它允许浏览器被释放并初始化元素。那么问题是,我如何强制它不使用警告框来初始化元素?获取AJAX的HTML中的元素无法通过getElementbyID找到

这里的相关代码...

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

AJAX_LoadResponseIntoElement(ID,文件),只需取 “文件” 有一个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。

如果我在此行之前放TWOalert(document.getElementById('containerdiv'));的副本,第一个表示NULL,第二个表示“[Object HTMLDivElement]”。

显然,这只是“containerdiv”未初始化的问题。

因此,问题是如何在XMLHTTPRequest获取这些元素后,如何强制这些元素的初始化,而不使用alert()?

回答

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); 
    }); 
}); 
+0

那花我花了一个小时才弄清楚该怎么做,但我得到了它的工作。如果你原谅我,我会在同一时间去哭,庆祝和抽烟......我即将放弃! – TimFoolery 2011-01-28 12:02:40

相关问题