2016-02-18 1 views
2

Я делаю программу, в которой я хочу добавить поле ввода в ячейку таблицы. Посмотрите на код ниже:Вставка текстового поля в ячейку таблицы с помощью javascript

var arr_title = ["song","artist","genre"]; 
for (var title in arr_title){ 
    var newl = document.createElement("input"); 
    newl.id = 'edit_text'; 
    var newf = "td_" + arr_title[title]; 
    newf.appendChild(newl); 
} 

Newf получает значение td_song, td_artist и т.д., и они уже определены как:

var td_song = document.createElement("td"); 
var td_artist = document.createElement("td"); 
var td_genre = document.createElement("td"); 

в одной и той же функции, а затем я приложил их к стол и работает отлично

, но когда я создаю элемент ввода, то есть ошибка:

Uncaught TypeError: newf.appendChild не функция

Я знаю, что у нее нет конечного тега, и она должна быть в элементе формы, но ошибка такая же, когда я пытаюсь добавить любой другой элемент.

Помощь!

+0

Newf является строка не является элементом, так что вы не можете AppendChild ему –

ответ

2

значение, сохраненное в newf, представляет собой строку, а не элемент DOM; appendChild не является допустимым методом для строк. Просто потому, что строковое значение, сохраненное в newf, соответствует имени созданной вами переменной (td_song и т. Д.), Не означает, что теперь это дескриптор этого элемента. Вы бы лучше хранить ваши созданные элементы в объекте, ключ от этого значения:

var elems = { 
    td_song: document.createElement("td"), 
    td_artist: document.createElement("td"), 
    td_genre: document.createElement("td") 
}; 
var arr_title = ["song","artist","genre"]; 
for (var title in arr_title){ 
    var newl = document.createElement("input"); 
    newl.id = 'edit_text'; 
    var newf = "td_" + arr_title[title]; 
    elems[newf].appendChild(newl); 
} 
+0

благодарю вас за вашу идею .. но то, что я делаю, это то, что перед созданием элемента ввода я добавил некоторый текст в элемент td (через пользовательский ввод), а затем создаю текстовое поле в том же ячейка таблицы. Итак, если я делаю это по-своему. Не создавайте две разные ячейки таблицы, когда я обращаюсь к объекту, чтобы добавить текст, а затем добавить текстовое поле? – sachsure

+0

Как я описал, создаст один элемент 'td' для td_song, td_artist и td_genre и добавит вход к любому элементу, как это делается в настоящее время в вашем коде. Он не будет создавать другой 'td' при доступе к объекту, только если вы вызываете' document.createElement ('td') 'снова, что я не вижу, что вы что-то делаете. Если вы хотите добавить другой элемент в ячейку таблицы вне этого, вы просто вызываете: 'elems.td_song.appendChild (someOtherElement);', например –

+0

https://jsfiddle.net/31my446x/ – sachsure

0

Есть ли у вас <td> идентификатор «td_» + arr_title [название]? Если да, то вам нужно сделать ...

var newf = document.getElementById("td_" + arr_title[title]); 
newf.appendChild(newl); 
+0

спасибо, но это не имеет этот id .. ячейки таблицы имеют общий идентификатор, при условии, что их отдельный идентификатор будет слишком громоздким. – sachsure

0

newf является строкой, и вы не можете добавить ребенка в строку, если вы хотите обратиться к переменной с этим именем, вы должны использовать window:

window[newf].appendChild(newl); 

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

+0

спасибо, но эта помощь помогает вам – sachsure

1

После этой строки, содержимое NEWF это просто строка чтения «td_song», например.

var newf = "td_" + arr_title[title]; 

Возможно, вы получаете ошибку JS из "newf is not a function"?

Если вы хотите Newf действительно быть один из тех ПОСРЕДНИКОВ, вы можете изучить с помощью Eval()

var newf = eval("td_" + arr_title[title]); 
+0

http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-функция -а-плохая идея –

+0

Большое вам спасибо .. это сработало..И я знаю об этом. – sachsure

+0

Ха-ха. Всегда есть какой-то робот, плачущий об Эвале. Пересечение улицы тоже опасно, если вы не знаете, что делаете. Я сделал + 1 ответ Роба, хотя для примера, как это можно сделать без eval с использованием объекта, это продуманная рекомендация. – efreed