我正在使用大型动态创建的表。它是2+列,第一列是文本,第二列是文本输入字段中的值。页面加载时,输入框具有默认值。我希望能够在文本字段中进行更改时保存该值。
当我使用$("#ID_NAME").val()
时,我会获得用户输入的任何值。如果我通过其他方式深入查看输入字段,.val()
在页面加载时为我提供默认值。该页面实际上并没有使用任何ID,我只是添加了一个用于调试。
我发布了一个显示问题的jsfiddle。 http://jsfiddle.net/GdjKp/1/
<fieldset>
<legend>test</legend>
<table id="menuSection">
<thead>
<tr>
<th>Id</th>
<th>field</th>
</tr>
</thead>
<tbody>
<tr id="row_1">
<td>description</td>
<td>
<input id="test_id" type="text" value="default value"></input>
</td>
</tr>
</tbody>
</table>
</fieldset>Chane text value and click
<input type="button" value="Go" onclick="run();"> the two elements found by jQuery will be in console.log() and the two values will pop up.
function run() {
var a = $("fieldset");
var b = $(a[0]).find("table > tbody > tr");
var c = $(b[0]).children();
var d = $(c[1].innerHTML);
var result_1 = $(c[1].innerHTML);
var result_2 = $("#test_id");
console.log(result_1);
console.log(result_2);
alert(result_1.val());
alert(result_2.val());
}
这里发生了什么?
[编辑]
这是最终的工作代码
function save() {
var cols = $("fieldset:first > table > thead > tr > th");
var sections = $("fieldset");
var ret = {};
var sectionsTmp = {};
var translation = {};
for (var j=1; j < cols.length-1; j++) { //loop on language columns, skipping field names and delete columns (first and last columns)
var lang = cols[j].innerHTML;
sectionsTmp = {};
for (var i=0; i < sections.length; i++) { //loop on sections/fieldsets
var sectionName = $(sections[i]).children("legend")[0].innerHTML;
var translations = $(sections[i]).find("table > tbody > tr");
translation = {};
for (var k=0; k < translations.length; k++) { //loop on translations in a section
var translationId = translations[k].innerText.trim();
var translationText = $(translations[k]).children().eq(j).find('input').val();
translation[translationId] = translationText.replace(/'/g,''');
}
sectionsTmp[sectionName] = translation;
}
ret[lang] = sectionsTmp;
}
var url = '<?= $basePath?>/admin/save/item/translations/';
var form = $('<form accept-charset="UTF-8" action="' + url + '" method="post">' +
'<input type="text" name="translations" value=\'' + JSON.stringify(ret) + '\' />' +
'</form>');
$('body').append(form);
console.log(form);
form.submit();
}
答案 0 :(得分:3)
你实际上并没有在result_1的情况下选择元素 - 你是根据它的html克隆它。
这一行:
var result_1 = $(c[1].innerHTML);
相当于:
var result_1 = $('<input id="test_id" type="text" value="default value"></input>');
正如您所看到的,结果1与输入字段中输入的内容无关 - 它与DOM完全分离。