Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't dynamically add rows to a <TABLE> in IE?

Tags:

I have an AJAX application that downloads a JSON object and uses the data to add rows to an HTML <table> using Javascript DOM functions. It works perfectly... except in Internet Explorer. IE doesn't give any sort of error, and I've verified as best as I can that the code is being executed by the browser, but it simply has no effect. I created this quick and dirty page to demonstrate the problem:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>  <table id="employeetable">     <tr>         <th>Name</th>         <th>Job</th>     </tr> </table>  <script type="text/javascript">     function addEmployee(employeeName, employeeJob) {         var tableElement = document.getElementById("employeetable");         if (tableElement) {             var newRow = document.createElement("tr");             var nameCell = document.createElement("td");             var jobCell = document.createElement("td");             nameCell.appendChild(document.createTextNode(employeeName));             jobCell.appendChild(document.createTextNode(employeeJob));             newRow.appendChild(nameCell);             newRow.appendChild(jobCell);             tableElement.appendChild(newRow);             alert("code executed!");         }     }      setTimeout("addEmployee(\"Bob Smith\", \"CEO\");", 1000);     setTimeout("addEmployee(\"John Franks\", \"Vice President\");", 2000);     setTimeout("addEmployee(\"Jane Doe\", \"Director of Marketing\");", 3000); </script>  </body></html> 

I haven't tried IE 8, but both IE 7 and IE 6 do not show the additional rows that are supposedly being added. I can't fathom why. Does anyone know a good workaround to this problem, or am I perhaps doing something wrong?

like image 939
Joshua Carmody Avatar asked May 01 '09 18:05

Joshua Carmody


1 Answers

You need to create a TBODY element to add your new TR to and then add the TBODY to your table, like this:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>  <table id="employeetable">     <tr>         <th>Name</th>         <th>Job</th>     </tr> </table>  <script type="text/javascript">     function addEmployee(employeeName, employeeJob) {         var tableElement = document.getElementById("employeetable");         if (tableElement) {             var newTable = document.createElement('tbody');   // New             var newRow = document.createElement("tr");             var nameCell = document.createElement("td");             var jobCell = document.createElement("td");             nameCell.appendChild(document.createTextNode(employeeName));             jobCell.appendChild(document.createTextNode(employeeJob));             newRow.appendChild(nameCell);             newRow.appendChild(jobCell);             newTable.appendChild(newRow);   // New             tableElement.appendChild(newTable);   // New             alert("code executed!");         }     }      setTimeout("addEmployee(\"Bob Smith\", \"CEO\");", 1000);     setTimeout("addEmployee(\"John Franks\", \"Vice President\");", 2000);     setTimeout("addEmployee(\"Jane Doe\", \"Director of Marketing\");", 3000); </script>  </body></html> 
like image 118
Wally Lawless Avatar answered Oct 20 '22 20:10

Wally Lawless