发布在 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 中不可见的表单元素的主要内容,如果未能解决你的问题,请参考以下文章
为啥在使用 jquery 创建元素后它们在 Chrome 中不可见
如何解决 ElementNotInteractableException:元素在 Selenium webdriver 中不可见?