循环进入 Table 并从列内的不同输入获取值
Looping into a Table and getting values from different Inputs inside the Columns
我有一个 Dynamic Table,它可以有未定义的行数,每一行都有定义的列数,并且在每一列内,总是相同的 Input/Control,像这样:
<table id='UndefinedTable'>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<!-- This table may have an undefined number of rows -->
</table>
另外,行可以被擦除(我想出了一种循环进入它的方法,通过给每一行 tr1、tr2、tr3 赋予数值,但正如我所说,用户可以擦除任何行,也,是一个非常肮脏的解决方案)。
我需要获取每个控件中的所有 values/text 并通过 ajax 将数据发送到 PHP 文件以插入每一行。
我一直在想一些方法来做到这一点,但问题是我不知道如何循环进入 table 并获取 Inputs 和 TextArea 的值。
您可以 select 所有这些元素
$("#UndefinedTable input, #UndefinedTable textarea") //or this...
$("#UndefinedTable").find("input, textarea") //...alternative version
并遍历它们:
$("#UndefinedTable input, #UndefinedTable textarea").each(function(){
alert($(this).val());
});
如果你也想要一个纯粹的 JavaScript 方法,你可以动态地给每个输入一个名称属性并循环遍历它们,将值放入数组或要传递的 JSon 对象中使用 Ajax.
到您的服务器
var inputs = document.getElementsByName('input');
var values = [];
for (var i = 0; i < inputs.length; i++) {
values.push(inputs[i].value);
}
要为您的文本框和文本区域命名,您可以使用:
.setAttribute('name', 'input');
通过 AJAX
提交
var formDATA = {};
$("#UndefinedTable tr").each(function(k){
var obj = {};
$(this).find("input,textarea").each(function(i){
obj["field"+i] = $(this).val();
});
formDATA["row"+k] = obj;
});
//console.log(formDATA);
如果您将属性 name
添加到输入和文本区域,您可以更改此行:
obj["field"+i] = $(this).val();
与:
obj[$(this)] = $(this).val();
现在,您可以通过 $.ajax() 作为 data
:
发送 formDATA
$.ajax({
//...
data : formDATA
//...
})
提交类似表格:
首先你必须改变你的 html,比如:
<form id="form1" action="/post.php" method="post">
<table id='UndefinedTable'>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<!-- This table may have an undefined number of rows -->
</table>
<input value="send" type="submit">
</form>
现在的 JS:
$("#form1").on("submit.block",function(e){
e.preventDerault();
});
$("#UndefinedTable tr").each(function(k){
$(this).find("input,textarea").each(function(i){
$(this).attr("name","row"+k+"[field"+i+"]");
});
});
$("#form1").off("submit.block");
如果您 post 将表单保存到 php 文件并使用 var_dump($_POST)
,脚本将打印一个数组,如:
array (size=2)
'row0' =>
array (size=4)
'field0' => string 'Field1' (length=6)
'field1' => string 'field2' (length=6)
'field2' => string '2015-01-14' (length=10)
'field3' => string 'row1' (length=4)
'row1' =>
array (size=4)
'field0' => string 'Field1' (length=6)
'field1' => string 'field2' (length=6)
'field2' => string '2015-01-23' (length=10)
'field3' => string 'row2' (length=4)
我有一个 Dynamic Table,它可以有未定义的行数,每一行都有定义的列数,并且在每一列内,总是相同的 Input/Control,像这样:
<table id='UndefinedTable'>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<!-- This table may have an undefined number of rows -->
</table>
另外,行可以被擦除(我想出了一种循环进入它的方法,通过给每一行 tr1、tr2、tr3 赋予数值,但正如我所说,用户可以擦除任何行,也,是一个非常肮脏的解决方案)。
我需要获取每个控件中的所有 values/text 并通过 ajax 将数据发送到 PHP 文件以插入每一行。
我一直在想一些方法来做到这一点,但问题是我不知道如何循环进入 table 并获取 Inputs 和 TextArea 的值。
您可以 select 所有这些元素
$("#UndefinedTable input, #UndefinedTable textarea") //or this...
$("#UndefinedTable").find("input, textarea") //...alternative version
并遍历它们:
$("#UndefinedTable input, #UndefinedTable textarea").each(function(){
alert($(this).val());
});
如果你也想要一个纯粹的 JavaScript 方法,你可以动态地给每个输入一个名称属性并循环遍历它们,将值放入数组或要传递的 JSon 对象中使用 Ajax.
到您的服务器var inputs = document.getElementsByName('input');
var values = [];
for (var i = 0; i < inputs.length; i++) {
values.push(inputs[i].value);
}
要为您的文本框和文本区域命名,您可以使用:
.setAttribute('name', 'input');
通过 AJAX
提交var formDATA = {};
$("#UndefinedTable tr").each(function(k){
var obj = {};
$(this).find("input,textarea").each(function(i){
obj["field"+i] = $(this).val();
});
formDATA["row"+k] = obj;
});
//console.log(formDATA);
如果您将属性 name
添加到输入和文本区域,您可以更改此行:
obj["field"+i] = $(this).val();
与:
obj[$(this)] = $(this).val();
现在,您可以通过 $.ajax() 作为 data
:
formDATA
$.ajax({
//...
data : formDATA
//...
})
提交类似表格:
首先你必须改变你的 html,比如:
<form id="form1" action="/post.php" method="post">
<table id='UndefinedTable'>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<tr>
<td><input type='text'></td> <!-- DataBase: Table Column1 -->
<td><input type='text'></td> <!-- DataBase: Table Column2 -->
<td><input type='date'></td> <!-- DataBase: Table Column3 -->
<td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
</tr>
<!-- This table may have an undefined number of rows -->
</table>
<input value="send" type="submit">
</form>
现在的 JS:
$("#form1").on("submit.block",function(e){
e.preventDerault();
});
$("#UndefinedTable tr").each(function(k){
$(this).find("input,textarea").each(function(i){
$(this).attr("name","row"+k+"[field"+i+"]");
});
});
$("#form1").off("submit.block");
如果您 post 将表单保存到 php 文件并使用 var_dump($_POST)
,脚本将打印一个数组,如:
array (size=2)
'row0' =>
array (size=4)
'field0' => string 'Field1' (length=6)
'field1' => string 'field2' (length=6)
'field2' => string '2015-01-14' (length=10)
'field3' => string 'row1' (length=4)
'row1' =>
array (size=4)
'field0' => string 'Field1' (length=6)
'field1' => string 'field2' (length=6)
'field2' => string '2015-01-23' (length=10)
'field3' => string 'row2' (length=4)