2010-11-13 283 views
0

我的JavaScript代碼應該使用AJAX接收數據並將其顯示在名爲「txtHint」的DIV中。然而,這是我得到的錯誤,當代碼執行(我用的是內置的Safari中調試器):JavaScript無法識別HTML中的元素

TypeError: Result of expression 'document.getElementById("txtHint")' [null] is not an object.

下面是代碼:

function showItem(str) 
{ 
if (str=="") 
    { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getitem.php?q="+str,true); 
xmlhttp.send(); 
} 

現在我得到: 類型錯誤:表達式'el'[undefined]的結果不是一個對象。

這是否表示我的元素不存在?

+2

請發佈您的標記。 – jwueller 2010-11-13 00:57:51

+1

你在DOM完成加載後運行這個嗎?如果不是,你正在嘗試獲取「txtHint」,然後getElementById(「txtHint」)將返回null。這可能適用於ajax請求中的回調,因爲它是異步的,但是如果str ==「」,它會立即發生 – 2010-11-13 01:01:38

+0

如何查看DOM是否未完成,並且我的div尚未「註冊」? – Parker 2010-11-13 01:08:43

回答

2

首先,檢查元素是否存在。

var el = document.getElementById('txtHint'); 
if (el) { 
    el.innerHTML = xmlhttp.responseText; 
} 

請確保您在DOM中生成元素後進行綁定。您也可以通過window.onload = showItem等待整個窗口加載。

人們使用像jQuery這樣的框架來節省時間。您的代碼會導致一些簡潔的內容:

$(function() { 
    function blah(str) { 
     if (str == '') { 
     $('#txtHint').html('') 
     return; 
     } 

     $.ajax({ url:'blah.php', success:function(html) { 
     $('#txtHint').html(html); 
     } }) 
    } 
});