为啥 jquery 数据表不响应点击?

Posted

技术标签:

【中文标题】为啥 jquery 数据表不响应点击?【英文标题】:why won't jquery datatable respond to click?为什么 jquery 数据表不响应点击? 【发布时间】:2018-10-28 14:48:18 【问题描述】:

我有一个从 ajax 填充的 jquery 数据表,但是当我单击一行时,表单击事件处理程序不会触发。这是我的数据表:

function initDataTables(watchlist) 
    $('#watchlistTable').DataTable(
        ajax: 
            url: "/MoneyMachine/getWatchlist.php",
            type: "post",
            data: watchlist:watchlist
        ,
        columns: [
             data: 'Symbol' ,
             data: 'CompanyName' ,
             data: 'ClosePrice', class: 'text-right' ,
             data: 'PricePctChangeToday', class: 'text-right',
             data: 'CAGR', class: 'text-right',
             data: 'BenchmarkCAGR', class: 'text-right',
             data: 'DivYield', class: 'text-right',
             data: 'ExDivDate',
             data: 'AppreciationPotential', class: 'text-right'
        ],    
        responsive: true,   //supposedly make table clickable but does nothing
        destroy: true       //A data table can only be initialized once.  It must be destroyed so it can be initialized again.      
    );

我尝试了几个不同的点击事件,如下所示:

$('.dataTable').on( 'click', '.dataTable', function () 
    console.log("watchlistTable was clicked");
);

像这样:

$('#watchlistTable tbody').on( 'click', 'tr', function () 
    console.log("watchlistTable was clicked");
);

像这样:

$('.display').on( 'click', '.display', function () 
    console.log("watchlistTable was clicked");
);

但是没有人开火。这是它的html

        <table id="watchlistTable" class="display" style="width:100%">
        <thead>
            <tr>
                <th>Sym</th>
                <th>Company Name</th>
                <th>Price</th>
                <th>Change%</th>
                <th>CAGR</th>
                <th>Benchmark<br>CAGR</th>
                <th>Div<br>Yield%</th>
                <th>Ex-Div<br>Date</th>
                <th>App<br>Pot%</th>
            </tr>
        </thead>
        </table>

【问题讨论】:

【参考方案1】:

我猜你在原始 html 中没有包含 &lt;tbody&gt;

尝试将其添加到目标选择器并委托给表本身

$('#watchlistTable').on( 'click', 'tbody tr', function () ...

请注意,$('.dataTable').on( 'click', '.dataTable', ... 正在尝试委托给现有类 dataTable,并且只会在其中包含该类的其他元素上触发。由于显示的 html 中没有任何内容具有该类,因此甚至不清楚该元素是什么,我怀疑您是否嵌套了具有相同类的元素

【讨论】:

我只是添加了它,但没有任何区别。 确保它被包装在一个就绪事件处理程序中,然后$(function() /* code here */) 这是我的 $(document).ready(function() var watchlist = new watchlistPage(); 在包含的 watchlist.js 文件中有 initDataTables("All Stocks");所以我知道它被击中了,因为表格填充正确。 最坏情况可以委托给文档$(document).on( 'click', '#watchlistTable tbody tr', function () 注意我在' tbody tr' 中错误地添加了一个额外的空间。应该删除前导空格

以上是关于为啥 jquery 数据表不响应点击?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我用jQuery写好checkbox的全选后,点击两次后,就不行了,要刷新页面后,点击才有响应,源码是这样

为啥片段中的晶圆厂不响应点击事件?

为啥xcode7创建的UIButton点击不灵敏,需要长按才响应点击?

为啥我的数据报包响应不完整?

为啥不响应代理请求

jQuery 响应式移动菜单