发布在 DataTables 中不可见的表单元素

Posted

技术标签:

【中文标题】发布在 DataTables 中不可见的表单元素【英文标题】:Posting form elements that aren't visible in DataTables 【发布时间】:2012-05-01 19:52:28 【问题描述】:

我在表单中包含的一个表上使用了一个名为 Datatables 的 jQuery 插件,这个表将包含许多表单元素。

我在页面上有一个保存更改按钮,它将执行 AJAX 请求以根据用户输入的内容更新数据库。

我遇到的问题是它只会发布当前在数据表中可见的表单元素。在我的一个示例中,有 74 行(全部包含多个字段)。默认显示的记录数为 10。

因此,当提交表单时,只会提交 10 行的表单元素。我要提交所有行的字段 - 在本例中是所有 74 行的字段。

有人对此有解决方案吗?谢谢。

【问题讨论】:

您的表是否使用服务器端源? 我正在使用经典的 ASP 来建表。 我的意思是——你是每次都从服务器获取隐藏的行,还是输出整个表,然后数据表为你分页? 哦,对了,我不会在服务器端隐藏任何行。我让 Datatables 完成所有的分页。 @ManseUK 数据表处理分页并销毁隐藏的行。 【参考方案1】:

Datatables 销毁隐藏的行并将它们从 DOM 中取出。如果您需要提交,您应该在提交之前使用 fnGetHiddenNodes() 来检索隐藏的行。看看api 页面

$.fn.dataTableExt.oApi.fnGetHiddenNodes = function ( oSettings )

    /* Note the use of a DataTables 'private' function thought the 'oApi' object */
    var anNodes = this.oApi._fnGetTrNodes( oSettings );
    var anDisplay = $('tbody tr', oSettings.nTable);

    /* Remove nodes which are being displayed */
    for ( var i=0 ; i<anDisplay.length ; i++ )
    
        var iIndex = jQuery.inArray( anDisplay[i], anNodes );
        if ( iIndex != -1 )
        
            anNodes.splice( iIndex, 1 );
        
    

    /* Fire back the array to the caller */
    return anNodes;

【讨论】:

非常感谢。在文档中查找此代码,但找不到。快速提问jQuery.inArray$.inArray 有什么区别? @GarethLewis 他们完全一样,$jQuery 的别名 好的,如果我理解了这个想法,我应该如何处理anNodes来提交表单?我必须以某种方式再次将每一行附加到表格上? @El_Hoy 我的表有复选框,所以我以这种方式使用它var hiddenCheckboxes = $(oTable.fnGetHiddenNodes()).find('input[type=checkbox]:checked'); 这将返回所有选中的复选框。然后将此数据与 AJAX 数据一起发送。

以上是关于发布在 DataTables 中不可见的表单元素的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 4 下拉菜单在数据表中不可见

为啥在使用 jquery 创建元素后它们在 Chrome 中不可见

如何解决 ElementNotInteractableException:元素在 Selenium webdriver 中不可见?

phpmyadmin 中不存在可见表

如果在 jQuery 中不显示,则更改另一个元素的可见性

数据模型表在数据透视表字段列表中可见,但在数据模型本身中不可见 - Excel 2016