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

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

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

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

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

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

【问题讨论】:

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

标签: jquery datatables


【解决方案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 数据一起发送。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多