2017-05-26 91 views
0

我想添加一個標頭到一個JavaScript函數的HTML表。整個腳本比較大,所以我剛剛在HTML表格中創建了html代碼片段,然後添加了一個標題添加到該表格的函數。 (當一個按鈕被點擊時,這個函數將被調用)。 但是我得到以下錯誤:703javascript將表頭添加到html表

Locations.html:703 Uncaught TypeError: Cannot read property 'createTHead' of null 

線對應與 「VAR HDR = tbs.createTHead();」代碼行。看起來好像該函數無法找到「myTable」表,並且它通過id行(我認爲)運行getelement時返回null。但我不確定爲什麼?爲什麼它無法找到這個表格元素?

<div class="statsContainer"> 
    <div class="mainCont" id="mainCont"></div> 
    <div class="statsLoc" id="statsLoc"> 
     <table class="myTable" id="myTable"></table> 
    </div> 
    <div class="listLoc" id="listLoc"></div> 
</div> 

function locClick(strLN) { 
    RegionName.innerText = strLN;  
    var qry = "select Latitude, Longitude, Description from locations where Location_ID in (select Location_ID from locations where Location_Name = '" + strLN + "')";  
    clearDiv("mainCont"); 
    clearDiv("statsLoc"); 
    clearDiv("listLoc");   
    phpRequest(qry, "getDataFromPhp", processPHP, 1);  
    addTableHead("myTable", "help");   
}    
function addTableHead(tbName, txtHead) { 
    var tbs = document.getElementById("myTable"); 
    var hdr = tbs.createTHead(); 
    var rw = hdr.insertRow(0); 
    var cell = rw.insertCell(0); 
    cell.innerHTML = txtHead;} 
+0

對不起,我忘了,包括在功能右花括號 - 但它的存在是我的代碼。 – Jon

+0

只需編輯您的問題即可解決該問題。並且,還要取出所有額外的換行符。 –

+1

這個錯誤很明顯。 '不能讀取屬性THead null'。所以,我們查看你的代碼,在哪裏訪問'THead'並查看你正在調用它的對象,因爲那是'null'對象。那個對象是'tbs'。如果我們再看看'tbs'是從哪裏來的,我們會在它上面的線上找到它。這條線看起來不錯(因爲你的桌子上有'myTable'的'id')。這導致我們懷疑你的代碼何時執行。如果addTableHead函數在HTML完成解析之前運行,它會解釋這個錯誤。 –

回答

0

我可以看到getElementById()返回NULL的唯一原因是造成「myTable的」犯規存在於DOM當函數被調用。

您是否在測試時調用了「手動」功能?

你可以使用DOMContentLoaded事件調用訪問DOM的功能:

document.addEventListener('DOMContentLoaded', function() { 
// Put JavaScript in here 
}); 
+0

你可能是對的,但我們沒有足夠的信息去了解這一點,因此你不能說這是問題所在。這應該是一個評論,而不是一個答案。 –

+1

我們知道id爲「myTable」,就像在HTML中一樣。 因此,返回NULL的唯一原因是在調用進行時id不存在。 –

+0

這是不正確的。由於OP沒有共享所有的代碼,我們無法知道「唯一」原因。我只是試圖幫助你理解,一個好的答案就是這個問題的答案。由於這個問題並沒有分享所有的信息(我們甚至不能複製它),所以你的想法會更好地傳達出來作爲評論。 –