【问题标题】:Javascript not working after Datatable Filter or Paging数据表过滤器或分页后 Javascript 不起作用
【发布时间】:2023-03-20 00:45:01
【问题描述】:

我正在使用 Django ListView 来显示发票列表。我正在尝试使用 Javascript 发送更新。例如,当发票已支付时,用户可以单击该行的图标,该发票将被标记为已支付。一切都运行良好,但是,我正在使用数据表来允许用户进行二次过滤。在页面加载时,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);
    });
});    

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

【问题讨论】:

    标签: javascript jquery django datatables


    【解决方案1】:

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

    $('#dt-invoice').on('click', '[id^=id_paid-]', function() {
      console.log("HERE")
      row = $(this).closest('tr');
      trid = row.attr("id");
      alert(trid);
    });
    

    您的点击事件被忽略的原因是,在您绑定它时,只有 DOM 中可用的匹配元素才能绑定该事件。 Datatable 插件修改table 内容,在分页/过滤时删除/添加新元素。通过将其绑定到table 元素(最接近的静态元素),您也可以处理所有这些动态元素。

    [参考文献]

    【讨论】:

    • 这是正确答案,但我希望您能详细说明原因。
    • A. Wolf,感谢您的解决方案和解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多