#javascript #jquery #html #json
#javascript #jquery #HTML #json
Вопрос:
Я заполняю таблицу html с помощью объекта JSON, используя следующий код —
HTML —
<input type="button" value="Generate Table" id="btn" />
<div id="dvTable">
</div>
JS —
$('#btn').click(function () {
var obj = [{ id: 1, name: "bunny", city: "nyc",userinput:"",iscancelled:"" }, { id: 2, name: "sunny", city: "LA",userinput:"",iscancelled:"" }, { id: 3, name: "chubby", city: "PA",userinput:"",iscancelled:"" }
, { id: 4, name: "punny", city: "DC",userinput:"",iscancelled:"" }, { id: 5, name: "money", city: "Pen",userinput:"",iscancelled:"" }];
alert(JSON.stringify(obj));
var table = document.createElement("table");
table.border = "1";
var columnCount = obj[0].length;
var row = table.insertRow(-1);
for (var i = 0; i < columnCount; i ) {
var headerCell = document.createElement("th");
headerCell.innerHTML = obj[0][i];
row.appendChild(headerCell);
}
$.each(obj, function (i, obj) {
row = '<tr data-id="' obj.id '"><td><input type="checkbox" value=' obj.id '></td><td>' obj.id '</td><td>' obj.name '</td><td>'
obj.city '</td><td><input type="text" id="address" ></td></tr>';
table.append(row);
});
var dvTable = document.getElementById("dvTable");
dvTable.innerHTML = "";
dvTable.appendChild(table);
});
Для простоты я взял небольшой объект JSON, но обычно у меня очень тяжелый объект. Я хочу взять значение, которое пользователь вводит в каждое текстовое поле, и сохранить его в поле ‘userinput’ каждого элемента объекта JSON. Кроме того, я также хочу сохранить, установлен ли флажок или нет, и сохранить ‘Y’ или ‘N’ в поле ‘iscancelled’ объекта JSON.
Я написал следующий код для этого, но, похоже, это не работает. В чем может быть проблема?
var revArray="";
$("[type='input']").each(function () {
revArray = $(this).val;
});
$.each(obj, function (i, obj) {
for (var i = 0; i < revArray.length; i ) {
obj.userInput= revArray[i];
}
if ($("[type='checkbox']:checked"))
obj.isCancelled = 'Y';
else
obj.isCancelled = 'N';
alert(JSON.stringify(obj));
Комментарии:
1. Чтобы быть педантичным, такого понятия, как объект JSON, не существует : то, что у вас есть, является объектом. (Или массив объектов.)
2. @nnnnnn Спасибо за это.
3. Что касается вашего фактического кода, первый
.each()
в вашем конечном блоке кода перезаписываетrevArray
строку на каждой итерации, но ваш другой код обрабатываетrevArray
как массив.for
Вложенный внутри$.each()
на самом деле не имеет смысла, потому что, по-видимому, вы хотите обновить каждый объект вobj
массиве с помощью ввода и значения флажка из соответствующей строки, а не из всех строк.4. Привет! Я удалил for внутри $.each(). Спасибо! Есть идеи, как получить значение каждого текстового поля в revArray?
Ответ №1:
Итак, я в конечном итоге сделал это с помощью jquery следующим образом, получив доступ к каждой строке таблицы, а затем найдя текстовое поле в этой строке —
$('table tr:gt(0)').each(function (i, row) {
var $row = $(row);
var val1 = $row.find('input[type="text"]').val();
});
Для тех, кто сталкивается с подобными проблемами, может использовать его, работает отлично!