Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 复选框只在第一页起作用-数据表、rails_Javascript_Ruby On Rails_Datatables - Fatal编程技术网

Javascript 复选框只在第一页起作用-数据表、rails

Javascript 复选框只在第一页起作用-数据表、rails,javascript,ruby-on-rails,datatables,Javascript,Ruby On Rails,Datatables,Senario:因此基本上我使用的是数据表,并且在其第一列上有复选框。我的数据表有多个页面(分页) 问题:当我在一个页面(可以是任何页面)上选中几个复选框,并在其他页面上选中几个复选框时 只有当我在当前页面上时,才会保存结果 我对datatables/javascript非常陌生,不知道如何解决这个问题 $('#formDataTable').DataTable({ responsive: true, autoWidth: true, "bF

Senario:因此基本上我使用的是数据表,并且在其第一列上有复选框。我的数据表有多个页面(分页)

问题:当我在一个页面(可以是任何页面)上选中几个复选框,并在其他页面上选中几个复选框时

只有当我在当前页面上时,才会保存结果

我对datatables/javascript非常陌生,不知道如何解决这个问题

$('#formDataTable').DataTable({
         responsive: true,
         autoWidth: true,
         "bFilter": true,
         "bRetrieve": true,
         "bInfo": true,
         "sPageFirst": false,
         "sPageLast": false,
});
我已经读了这么多页了。
链接当前与此问题无关->

如果您使用的是Rails,那么如何使用

如果要创建新记录,一个简单的示例是:

<%= form_for(:table_name, :action => 'create') do |f| %>

<table summary="Form data table">
  <tr>
    <th><%= f.label(:responsive) %></th>
    <td><%= f.check_box(:responsive) %></td>
  </tr>
  <tr>
    <th><%= f.label(:auto_width) %></th>
    <td><%= f.check_box(:auto_width) %></td>
  </tr>
</table>

<%= submit_tag("Create Page") %>

<% end %>
“create”)do | f |%>
即使您有多个页面,如果您将所有表单助手都保存在
form_for
方法中,那么所有内容都应该保存到数据库中。

原因 出于性能原因,jQuery DataTables会从DOM中删除不可见的行,这就是为什么在提交表单时只会提交可见复选框的原因

解决方案 在提交表单时,您可能需要将那些已选中且在DOM中不存在的
转换为

例如,要提交包含所有复选框值的表单:

var table=$('#示例').DataTable();
$(“表格”)。在('submit',函数(e){
var$form=$(此);
//迭代表中的所有复选框
表.$('input[type=“checkbox”]”)。每个(函数(){
//如果DOM中不存在复选框
如果(!$包含(文档,本)){
//如果选中复选框
如果(选中此项){
//创建一个隐藏元素
$form.append(
$('')
.attr('类型','隐藏')
.attr('name',this.name)
.val(此.value)
);
}
} 
});          
});
如果您通过Ajax提交表单,则更简单

例如,要使用所有复选框的值通过Ajax提交表单:

var table=$('#示例').DataTable();
$(“#btn提交”)。在('click',函数(e){
e、 预防默认值();
$.ajax({
url:“/path/to/your/script.php”,
数据:table.$('input[type=“checkbox”]”)。serialize();
}).完成(功能(数据){
控制台日志(“响应”,数据);
});
});
演示
请参阅我们的文章进行演示。

在尝试了很多方法之后,我终于找到了这个解决这个问题的甜蜜而简单的方法!!!! 这里#contect_form是表单id…您必须将数据表放在表单中,因为在页面加载时您可以初始化数据表行
var表;
$(文档).ready(函数(){
table=$('#table_id')。数据表({
滚动:“412px”,
是的,
自动宽度:false,
错:,
是的,
});
$('contact#u form')。关于('submit',函数(e){
var form=此;
//将所有页面中的一组表单元素编码为名称和值的数组
var params=table.$('input,select,textarea').serializeArray();
//迭代所有表单元素
$.each(参数、函数(){
//如果DOM中不存在元素
如果(!$.contains(文档,表单[this.name])){
//创建一个隐藏元素
$(表格)。附加(
$('')
.attr('类型','隐藏')
.attr('name',this.name)
.val(此.value)
);
}
});
});

});
Datatables是一个jquery插件,根据当前选择的页面创建和销毁行。HTML在这里几乎是无关紧要的-Datatables将对其进行大量修改。。。我懂了。。我不太熟悉这种数据表方法。你不认为传统的表单助手会做到这一点吗?:)非常感谢。现在一切似乎都很好:)我将查看gyrocode.com/articles中有关复选框的内容。