Неуместная печать javascript innerHTML

<table class="privilage">
                <caption> These are the default users for institution </caption>
                <thead>
                    <tr>
                        <th>Users Name</th>
                        <th>User Id</th>
                        <th>Password</th>
                   </tr>
                </thead>
                <tbody>
                         <tr>
                            <td><input type="text" name='DefaultUser[]' value='' ><br></td>
                            <td><input type="text" name='DefaultUser_UserName[]' value=''></td>
                            <td><input type="password" name='DefaultUser_Password[]'></td>
                        </tr>


                <div id="New_User"></div>
                </tbody>
  </table> <table>
                    <tr>
                        <td><input type="button"   name="Add_New_User" value="Add new User" onclick="addRow()"></td>
                    </tr>
                </table>

В приведенном выше HTML есть div с именем New_User, я попросил приведенный ниже javascript распечатать с использованием innerHTML для этого div, но он распечатывается в другом месте.

 function addRow()
 {
var d= document.getElementById("New_User");
d.innerHTML+="<tr><th><input type='text' name='DefaultUsers' value=''/> Manager<br></th><th><input type='text' name='UserName' value=''/></th><th><input type='password' name='Password'/></th></tr>";
}​

Мне просто нужно добавить эту новую строку в таблицу «привилегии». Любое рассмотрение и помощь приветствуются. Заранее спасибо.

код Jsfiddle


person Abel Jojo    schedule 24.06.2012    source источник


Ответы (5)


На самом деле вы можете добавлять новые строки в свою таблицу без дополнительного Div внутри нее. Для этого вы можете использовать внутренние функции JS. Также удалите <div id="New_User"></div> из вашего tbody. Это сделает вашу структуру DOM недействительной.

Сделайте это, рабочая демонстрация: http://jsfiddle.net/epinapala/QPY6b/5/ ,

Добавьте новый атрибут id="tableID" в свою таблицу!

function addRow() {
            var tableID = "tableID";
            var table = document.getElementById(tableID);

            var rowCount = table.rows.length;
            var row = table.insertRow(rowCount);

            var cell1 = row.insertCell(0);
            var element1 = document.createElement("input");
            element1.type = "text";
            cell1.appendChild(element1);

            var cell2 = row.insertCell(1);
            var element2 = document.createElement("input");
            element2.type = "text";
            cell2.appendChild(element2);

            var cell3 = row.insertCell(2);
            var element3 = document.createElement("input");
            element3.type = "text";
            cell3.appendChild(element3);


        }

person Eswar Rajesh Pinapala    schedule 24.06.2012
comment
var ID_таблицы = ID_таблицы; должен ли он заканчиваться ; - person Abel Jojo; 24.06.2012

К сожалению, ваша структура HTML DOM недействительна. Вы не можете поместить тег div внутри тега tbody, как вы это делаете. tbody может содержать только tr тегов.

Дайте идентификатор New_User вашему тегу tbody, и ваш скрипт заработает.

person zetlen    schedule 24.06.2012

Это может быть то, что вам нужно. http://jsfiddle.net/ztnMk/

<table class="privilage">
                <caption> These are the default users for institution </caption>
                <thead>
                    <tr>
                        <th>Users Name</th>
                        <th>User Id</th>
                        <th>Password</th>
                   </tr>
                </thead>
                <tbody id="New_User">
                        <tr>
                            <td><input type="text" name='DefaultUser[]' value='' ><br></td>
                            <td><input type="text" name='DefaultUser_UserName[]' value=''></td>
                            <td><input type="password" name='DefaultUser_Password[]'></td>
                        </tr>
<!-- YOUR NEW TR GOES HERE... -->

                </tbody>

а вот JS:

function addRow(){
var d= document.getElementById("New_User");
d.innerHTML+="<tr><th><input type='text' name='DefaultUsers' value='Manager'/> </th><th><input type='text' name='UserName' value=''/></th><th><input type='password' name='Password'/></th></tr>";

}​

Надеюсь, это поможет!

person hriziya    schedule 24.06.2012
comment
Пожалуйста, ответьте на вопрос здесь, хорошо иметь ссылку, но мне не нужно посещать, чтобы даже знать, о чем вы говорите. - person Juan Mendes; 24.06.2012

замените div на tr с идентификатором и вставьте в него свой innerHTML. Прежде чем сделать это, удалите теги tr из вашего внутреннего html.

возможно, вам придется с самого начала поместить 3 пустых ячейки в ваш tr; вы можете установить высоту вашего tr на 0, также с самого начала. Затем, вставив свой innerHTML в tr, вы можете удалить высоту следующим образом:

document.getElementById("myTr").style.height = "";
person Tom    schedule 24.06.2012

Я внес некоторые изменения, например, переместил ваш div из всех таблиц,

<table class="privilage">
   <caption> These are the default users for institution </caption>
   <thead>
       <tr>
          <th>Users Name</th>
          <th>User Id</th>
          <th>Password</th>
       </tr>
   </thead>
   <tbody>
       <tr>
          <td><input type="text" name='DefaultUser[]' value='' ><br></td>
          <td><input type="text" name='DefaultUser_UserName[]' value=''></td>
          <td><input type="password" name='DefaultUser_Password[]'></td>
       </tr>
    </tbody>
</table> 
<div id="New_User"></div> 
<table>
  <tr>
     <td><input type="button"   name="Add_New_User" value="Add new User" onclick="addRow()"></td>
  </tr>
</table>

Это добавляет новую строку внизу первой и перед кнопкой добавления пользователя. Просмотрите эту скрипту.

person Umesh Aawte    schedule 24.06.2012
comment
Это тоже хорошо. Большое спасибо - person Abel Jojo; 24.06.2012