我需要能够动态添加和删除不定数量的表行。我还需要能够在这些表行中链接选择框。我得到了预期的结果(这是错误的),但我不是 Javascript 爱好者,我不知道我在做什么。
我正在使用来自 Mika Tuupola 的 chained.js 脚本和几乎在任何地方都可以找到的“动态表”脚本。
<table id="table">
<tr><td><input id="dept" name="dept[]" /></td>
<td><input id="service" name="service[]" /></td>
<td><input id="reason" name="reason[]" /></td>
</tr>
</table>
<script language="javascript">
$("#service").chained("#dept");
$("#reason").chained("#dept");
function addRow(table) {
var row = $('#table tbody>tr:last').clone(false);
row.insertAfter('#table tbody>tr:last');
}
function delRow(el) {
while (el.parentNode && el.tagName.toLowerCase() != 'tr') {
el = el.parentNode;
}
if (el.parentNode && el.parentNode.rows.length > 2) {
el.parentNode.removeChild(el);
}
}
</script>
希望这足以说明问题。
显而易见的事情发生了,因为链式选择是基于 ID 的。在第一个下拉列表中进行选择后,“子”下拉列表将链接到第一个下拉列表。
我怀疑我需要以某种方式修改每个选择框的 ID,然后在链接分配中增加 ID。但我也怀疑可能有一种更简单的方法来做到这一点,或者它需要某种委托,因为我可能需要在添加表格行后销毁并重新分配链......?
我不知道。任何指向正确方向的指针将不胜感激。
更新
我做了一个小提琴。它仅适用于 Chrome。框架/扩展的某些组合在其他浏览器中工作和部分工作。但是我唯一可以让这个例子工作的是 Chrome。抱歉,我没有很多 JSFiddle 练习。
请注意,如果您从第一个下拉列表中选择一个选项,然后添加一行,会发生什么情况。添加行的第二个下拉列表中的所有选项将是第一行中第一个下拉列表的选项。
如果您添加一行然后开始尝试选择选项,那么无论您在第一个下拉菜单中放入什么,第二个下拉菜单都不会变为活动状态。