Jquery DataTable 事件未调用

Posted

技术标签:

【中文标题】Jquery DataTable 事件未调用【英文标题】:Jquery DataTable Event is not calling 【发布时间】:2015-09-08 20:29:06 【问题描述】:

我正在使用 jquery 数据表。表工作正常。我的意思是正确加载记录。现在我想要的是,我需要过滤记录 例如,我在 DataTable 中有很多记录,我想过滤(自定义)记录,这些记录只会显示特定列的正数。

所以,为此我创建了下面的函数。

$.fn.dataTableExt.afnFiltering.push(
    function( oSettings, aData, iDataIndex ) 
        alert('51');
        if (myFilter.val() == 1)
            return true;
        else if (myFilter.val() == 2)
            return (aData[3].indexOf('-') == -1);
        else
            return (aData[3].indexOf('-') != -1);
    
);

但我不知道为什么它没有调用。我想调用这个函数。我已经使用服务器端处理方法进行绑定。我知道这个方法会在bind(draw)的时候调用。

我在任何地方都调用过这个函数,比如,

a) 在 $(document).ready 中, b) DataTable 配置设置后 c) 在 $(document).ready 之外

而且,通常我手动重新创建了 DataTable。

 var oTable = $('#DataGrid').dataTable();                
            oTable.fnDestroy();
            $('#DataGrid').empty();

Tblheader = '<thead><tr><th> <select id="myFilter" class="select-filter"><option value="1">All</option> <option value="2">Positive</option> <option value="3">Negative</option> </select></th> </tr>      <tr><th rowspan="2" style="width: 5%;">Excl.</th><th rowspan="2">CUC</th> <th rowspan="2" > Late Model </th><th colspan="2">' +
                'Test1 </th><th colspan="2"> Test 2 </th> <th rowspan="2"> Test 3 </th><th id="thQtyParts" class="clsQtyParts" colspan="12" align="center"> Test 4 ' +
                                              '</th> <th rowspan="2"> Test 87 </th> <th rowspan="2"> Test 5 </th> <th colspan="4" align="center"> <input id="btnSurplus1" type="button" value="Positve" style="width: 100px;" /> Test 6 </th> <%--<th> &nbsp; </th>--%> ' +
                                              '</tr> <tr> <th> Test 7 </th> <th> Test 8</th><th> Test 8 </th> <th>Test 9</th><th> 12 </th> <th>11</th> <th> ' +
                                              '10 </th> <th>9 </th> <th> 8 </th> <th> 7  </th> <th> 6 </th>' +
                                              '<th> 5 </th>  <th>4 </th> <th> 3</th>  <th>2 </th> <th> 1  </th> <th> Test 22 </th> <th> test 23</th> <th>' +
                                              ' Test 11</th> <th> test 12</th> <%--<th>  &nbsp; </th>--%>   </tr> </thead>';

            $("#DataGrid").append(Tblheader);

            if (val == "Test Model") 

                $("#DataGrid").DataTable(
                    "iDisplayLength": 10,
                    "bServerSide": true,
                   /* "sDom": 'fltip', */
                    "sAjaxSource": '<%= Url.Action("GetTestData") %>',
                    "sServerMethod": "POST",
                    "fnServerParams": function (aoData) 
                        aoData.push( "name": "ID", "value": $("#ddl1").val() ,
                     "name": "strCatg", "value": $("#ddlCat").val() )
                    ,
                    "aoColumns": [ sWidth: '1%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,
                     sWidth: '5%' ,  sWidth: '5%' ,  "targets": [10], "visible": false, "searchable": false ,  "targets": [11], "visible": false, "searchable": false ,
                     "targets": [12], "visible": false, "searchable": false ,  "targets": [13], "visible": false, "searchable": false ,  "targets": [14], "visible": false, "searchable": false ,
                     "targets": [15], "visible": false, "searchable": false ,  "targets": [16], "visible": false, "searchable": false ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,
                     sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%' ,  sWidth: '5%'],
                    "fnInitComplete": function (oSettings, json) 
                        setTimeout(function ()  $.loader('close'); , 1000);
                    
                );

谢谢 -尼梅什

【问题讨论】:

你忘记了d) 数据表被初始化之前!这将被自动调用。 【参考方案1】:

终于找到了解决办法。 我在

中创建了一个功能,例如在测试按钮 onclick 上
$(document).ready(function ()     
 $("#btnTest").click(function () 
                    $("#Grid").dataTable().fnDestroy();
                    $.fn.dataTableExt.afnFiltering.push(
                    function (oSettings, aData, iDataIndex)                     
                        /* You code goes here */ 
                    );
                );

);

这对我来说很好。

【讨论】:

以上是关于Jquery DataTable 事件未调用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery DataTable 日期范围搜索

datatable -- 搜索框

DataTable 错误:未捕获的 ReferenceError:未定义 jQuery

jquery datatable:页面长度选择列表未显示

将单击功能添加到 Jquery DataTable 中的两个按钮

使用 JQuery 的 JavaScript 中的下拉菜单未调用单击事件