从动态添加的表行中获取数据

Posted

技术标签:

【中文标题】从动态添加的表行中获取数据【英文标题】:Getting data from dynamically added table rows 【发布时间】:2016-07-18 18:21:39 【问题描述】:

我有一个 Django 发票项目,它有一个包含产品、制造商等的后端。

现在有一个带有列标题的账单表:产品 ID、产品名称、产品价格、产品数量、税金、总计等

使用添加行按钮,用户可以为下一个产品添加行(即动态添加的行)。

我现在想要的是将 jQuery 事件侦听器与每个产品 ID 列绑定(即,如果我有 5 个产品的 5 行,每行应该有一个产品 ID 列),例如用户输入(和编辑)产品 ID,我可以 - 在 AJAX 的帮助下填充剩余的列。

我的疑问是如何做到这一点。

另外,当我取回 AJAX 数据时,如何识别要添加数据(产品名称、产品价格等)的行?

编辑 1

我正在使用以下代码生成动态行:

function generateTableRow() 
var emptyColumn = document.createElement('tr');

emptyColumn.innerhtml = '<td><a class="cut">-</a><span class="itemcode" contenteditable></span></td>' +
    '<td colspan="2"><span contenteditable></span></td>' +
    '<td><span contenteditable>100.00</span></td>' +
    '<td><span contenteditable></span></td>' +
    '<td><span contenteditable></span></td>'+
    '<td><span contenteditable></span></td>' +
    '<td><span contenteditable></span></td>'+
    '<td><span contenteditable></span></td>' +
    '<td><span contenteditable></span></td>' +
    '<td><span contenteditable></span></td>' ;



return emptyColumn;

请注意,第一个跨度具有类:“itemcode”

这是我的 jquery 代码:

$("#inventory_table .itemcode").on("focus", function()
alert( "On focus for table inventory called." );

alert($(this).text());
);

表 id 是“inventory_table”。

此 jquery 事件侦听器未与动态生成的行绑定。

感谢任何帮助。

谢谢

【问题讨论】:

【参考方案1】:

假设你有这样一张桌子:

<table id="products">
<tbody>
<tr><td><input type="text" class="productid"></td><td><input type="text"></td><td><input type="text"></td></tr>
<tr><td><input type="text" class="productid"></td><td><input type="text"></td><td><input type="text"></td></tr>
</tbody>
</table>

你可以在类中附加一个监听事件:

$( "#products .productid" ).on( "change", function() 
 // do your AJAX here
);

您可以将$(this) 传递给AJAX 响应的回调函数以获取行。从那里,您可以跳转到第 2、第 3 列。

$(this).closest('tr').find('td:nth-child(2) input').val(x) // Insert value for second column
$(this).closest('tr').find('td:nth-child(3) input').val(y) // Insert value for third column

如果输入的类为.productid,则您添加的任何空白新行都将具有相同的功能

【讨论】:

请看我的编辑,似乎有一些问题。请求您的帮助 我不认为跨度可以接收“焦点”。如果您要使跨度内容可编辑,为什么不直接使用 &lt;input type="text"&gt; 呢?有关示例,请参见此 jsfiddle:jsfiddle.net/c9keLynn 我刚刚也检查了输入,它不起作用。并且 span 接收焦点模糊。 On Focus,后跟 on blur 是 on change 的替代品(只能用于输入)。为了与动态创建的元素绑定,我只调用了命名函数 - 它的工作是添加事件侦听器(我的代码的第二部分),每次添加新行时。 你用的是什么版本的jQuery?您可能需要使用 live() 而不是 on()。 Live 应该是动态绑定的,但在以后的版本中被替换为 on。 我使用 jQuery 1.12.0 。我明白你的意思!!但我相信 1.12 应该已经被替换了。无论哪种方式,我都需要检查一下。

以上是关于从动态添加的表行中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从表中获取数据并检查表行中是不是存在用户 ID

向动态创建的表行添加按钮

如何分离从表行中获取的值并将其存储在雪花中的数组中

如何从我的 jquery 函数中获取表行中选定选项的值

jQuery:通过单击按钮从表行中获取值[重复]

第 1 页后无法从 jquery DataTable 表行中获取属性值