Jquery在创建新行时不向最后一行添加索引
Jquery not adding index to last row when creating a new row
谁能告诉我为什么第一行得到和索引值为1,但每隔一个新行也得到1而不是2,3,4等等。
<!DOCTYPE html>
<head>
<meta charset="utf-8">
</head>
<body>
<form>
<table>
<thead>
<tr>
<th scope="col">Track</th>
<th scope="col">Album</th>
<th scope="col">Artist</th>
</tr>
</thead>
<tbody>
<tr>
<td><input name="track[0]" id="track"></td>
<td><input name="album[0]" id="album"></td>
<td>
<select name="artist[0]" id="artist">
<option value="">Please select</option>
<option value="1">Joe Bloggs</option>
<option value="2">Jack Bloggs</option>
<option value="3">Tina Bloggs</option>
</select>
</td>
</tr>
</tbody>
</table>
</form>
<button>Add Row</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(document).ready(function($)
{
// trigger event when button is clicked
$("button").click(function()
{
// add new row to table using addTableRow function
addTableRow($("table"));
// prevent button redirecting to new page
return false;
});
function addTableRow(table)
{
var $tr = $(table).find("tr:last").clone();
alert($tr);
var fname = $("#track").attr("name");
var nid = fname.match(/'[(.*?)']/g);
var idx = nid[0];
idx = idx.replace(/[[']]/g,'')
var n = fname.split("[");
idx = parseInt(idx) + 1;
$tr.find("input,select").attr("name", n[0] + "[" + idx + "]");
$(table).find("tbody tr:last").after($tr);
};
});
</script>
</body>
我似乎不能弄清楚如何添加一个新的行,每次增加每个表元素的"名称"1每次准备使用AJAX帖子。
新行创建错误。艺人和专辑元素name总是track[0]
这样做不是更容易吗?
function addTableRow(table) {
var index = $(table).find("tbody tr").length;
var $tr = $(table).find("tr:last").clone();
$tr.find("input,select").each(function (i, k) {
var old_name = $(k).attr("name");
var new_name = old_name.replace(index-1, index);
$(k).attr("name", new_name);
});
$(table).find("tbody tr:last").after($tr);
};
演示另外,考虑在每个input/select
中给出一个class
而不是一个id,并给行一个id
。这样更容易处理。正如@HMR所说,当克隆tr
时,inputs
和select
的id也被克隆,添加行然后导致具有相同id的多个元素。这不是很好,确保每个元素都是唯一的ID
把tr
算在tbody
里怎么样:
function addTableRow(table)
{
var $tr = table.find("tbody").find("tr").last().clone();
var fname = $("#track").attr("name");
var nid = fname.match(/'[(.*?)']/g);
var new_idx = table.find('tbody').find('tr').length;
var n = fname.split("[");
idx = parseInt(idx) + 1;
$tr.find("input,select").attr("name", n[0] + "[" + new_idx + "]");
$(table).find("tbody tr:last").after($tr);
};
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 动态插入的表:JQuery未检测到最后一行
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何在Angular UI网格中选择下一行
- 在索引.html和应用.js [node.js] 之间共享变量
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 如何为高图中的区域线创建z索引
- 按行索引查找一行,然后在jquery中查找特定的td
- Javascript:如何在多维数组的索引处插入一行
- 检查HTML行文本框是否为空,并且除最后一行外,选择索引是否为零
- Jquery在创建新行时不向最后一行添加索引
- 如何求出同一位置下一行td的索引
- 如何从下一行获取与当前TD具有相同索引的TD