我正在使用Django ListView来显示发票列表。我正在尝试使用Javascript发送更新。例如,当支付发票时,用户可以单击该行的图标,该发票将被标记为已付款。一切都运行良好,但是,我使用datatable来允许用户进行二次过滤。在页面加载时,javascript和对服务器的调用工作正常,但是,当使用过滤器或分页时,Javascript没有获取行号。为简单起见,我使用alert()函数测试它 - 这里是html
HTML:
<table width="100%" class="table table-striped table-bordered table-hover" id="dt-invoice">
<thead>
<tr>
<th></th>
<th>Inoice Number</th>
<th>Description</th>
<th>Date Sent</th>
</tr>
</thead>
<tbody>
{% csrf_token %}
{% for i in invoice %}
<tr id="{{ i.invoice }}">
<td><a id='id_paid-{{ i.id }}' title="I Got This!" href="#"><i class="fa fa-check fa-fw"></i></a></td>
<td>i.invoice_number</td>
<td>i.invoice_description</td>
<td>i.invoice_sent_date</td>
</tr>
{% endfor %}
</tbody>
</table>
使用Javascript:
$(document).ready(function() {
$('#dt-invoice').DataTable({
buttons: [ 'copy', 'csv', 'excel', 'pdf','print'],
"iDisplayLength": 10,
"processing": true,
responsive: true,
"dom": '<"top pull-left" li><"top pull-right" f> <t> <"bottom pull-left" iB><"bottom pull-right" p>',
});
$('[id^=id_paid-]').click(function(){
console.log("HERE")
row = $(this).closest('tr');
trid = row.attr("id");
alert(trid);
});
});
有什么想法吗?提前致谢!
答案 0 :(得分:1)
您应该将click事件委托给最近的静态容器:
table
忽略click事件的原因是因为在绑定它时,只有DOM中可用的匹配元素才能获得事件绑定。 Datatable插件修改table
内容,删除/添加分页/过滤的新元素。通过将其绑定到 var a = [
"Hydrogen",
"Helium",
"Lithium",
"Beryllium"
];
// initial sytax
var a2 = a.map(function(s){ return s.length });
// arrow function sytax
var a3 = a.map( s => s.length );
元素(最接近的静态元素),您也可以处理所有这些动态元素。
[参考文献]