Javascript在Datatable Filter或Paging之后无法正常工作

时间:2016-10-11 11:35:02

标签: javascript jquery django datatables

我正在使用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);
    });
});    

有什么想法吗?提前致谢!

1 个答案:

答案 0 :(得分:1)

您应该将click事件委托给最近的静态容器:

table

忽略click事件的原因是因为在绑定它时,只有DOM中可用的匹配元素才能获得事件绑定。 Datatable插件修改table内容,删除/添加分页/过滤的新元素。通过将其绑定到 var a = [ "Hydrogen", "Helium", "Lithium", "Beryl­lium" ]; // initial sytax var a2 = a.map(function(s){ return s.length }); // arrow function sytax var a3 = a.map( s => s.length ); 元素(最接近的静态元素),您也可以处理所有这些动态元素。

[参考文献]