jQuery datatables在行上导航时,已选择的行数据在分页表上被重置

harpal18

我正在使用jquery数据表。http://jsfiddle.net/s3j5pbj4/2/我在分页表中填充了约3000条记录,问题是如果在第一页中选择了很少的复选框和下拉选项并移动到下一页(通过单击分页的下一个按钮)并且再次返回首页,所选数据将再次重置(即,假设每个分页页面在每页上显示10行,如果我在首页上选择了5行,然后导航到下一页,然后再次返回到所选的第一页)再次重置该行的数据)。我希望我的用户应该能够看到他在任何页面上所做的所有选择,然后提交。

    $(document).ready(function() {
            var oTable = $('#dbResultsTable').dataTable({
                "sPaginationType": "full_numbers" ,
                "paging":   true,
                "ordering" : true,
                "scrollY":false,
                "autoWidth": false,
                "serverSide": false,
                 "processing": false,
                  "bDeferRender": true,
                "info":     true ,
                "lengthMenu": [[10,25,50 ,100, -1], [10,25,50, 100, "All"]],
                "scrollX": "100%" ,
                 "aoColumns":[

            { "mDataProp": null},

            { "mDataProp": "operation"}
      ],

        "sAjaxSource" : "ResultPopulator",
        "bJQueryUI" : true,
        fnRowCallback : function(nRow,aaData, iDisplayIndex) {

        jQuery('td:eq(0)', nRow).html('<input id="checkId_' + nRow+ 'name="" type="checkbox")>');
        var operationString = '<select name="operation" >';

        operationString = operationString + '<option selected disabled hidden value=""></option>';
for ( var i = 0; i < aaData.operation.length; i++) {
operationString = operationString+ '<option>'   + aaData.operation[i]+ '</option>';
}

    operationString = operationString   + '</select>';
jQuery('td:eq(1)', nRow).html(operationString);
return nRow;
},
}
);

});

function validateFields(){
    var status = true;
     var rowSelected = false ;
      var rows = $("#dbResultsTable").dataTable().fnGetNodes();
        for (var i = 0; i < rows.length; i++) {
            var cells = rows[i].cells;
            if(cells[0].children[0].checked){
                 rowSelected = true;
                 var operation =  cells[1].children[0].value;
                 if(operation==""){
                    var msz = " Please select an operation"  
                    status = false ;
                    printMsz(msz);
                     break;
                 }
            }
}

有人可以帮我吗?

Gyrocode.com

在JSFiddle上查看我的解决方案

的HTML

<table id="test" class="display">
    <thead><tr><th>select</th><th>operation</th></tr></thead>
    <tbody></tbody>
</table>

<p>
    <input id="test-data-json" name="test_data_json" type="hidden">
    <button id="btn-submit">Submit</button>
</p>

Javascript:

//ajax emulation
$.mockjax({
   url: '/test/0',
   responseTime: 200,
   responseText: {
      "aaData" : [
         [{"id":1}, {"chk":"on"}, {"operation":["Modify", "Delete"]}],
         [{"id":2}, {"chk":"on"}, {"operation":["Modify", "Delete"]}],
         [{"id":3}, {"chk":"on"}, {"operation":["Modify", "Delete"]}],
         [{"id":4}, {"chk":"on"}, {"operation":["Modify", "Delete"]}],
         [{"id":5}, {"chk":"on"}, {"operation":["Modify", "Delete"]}],
         [{"id":6}, {"chk":"on"}, {"operation":["Modify", "Delete"]}],
         [{"id":7}, {"chk":"on"}, {"operation":["Modify", "Delete"]}]
      ]
   }
});

// Global variable holding current state of the controls in the data table
var g_data = {};

var $table = $('#test');
$table.dataTable( {
   "lengthMenu": [[2,25,50 ,100, -1], [2,25,50, 100, "All"]],
   "pagingType": "full_numbers" ,
   "paging":   true,
   "ordering" : true,
   "scrollY":false,
   "autoWidth": false,
   "serverSide": false,
   "processing": false,
   "info":     true ,
   "deferRender": true,
   "processing": true,
   "columns": [
      ["data", 1 ],
      ["data", 2 ]
   ],
   "ajax" : {
      "url": "/test/0",
      "dataSrc" : function(json){
         var data = json.aaData;
         for (var i = 0; i < data.length; i++){
            var chk_name  = 'chk_' + data[i][0].id;

            // If checkbox was never checked
            if(typeof g_data[chk_name] === 'undefined'){
               // Retrieve checkbox state from received data
               g_data[chk_name] = (data[i][1].chk === 'on') ? true : false;
            }
         }

         return data;
      }
   },
   "createdRow" : function( row, data, index ){
      var chk_name  = 'chk_' + data[0].id;
      var chk_checked = (g_data[chk_name]) ? " checked" : "";

      $('td:eq(0)', row)
         .html('<input name="' + chk_name +'" type="checkbox" value="1"' + chk_checked + '>');

      var select_name = 'select_' + data[0].id;
      html =
         '<select name="' + select_name +'">'
          + '<option value="">Select one</option>'
          + '<option'
          + ((typeof g_data[select_name] !== 'undefined' && g_data[select_name] === data[2].operation[0]) ? ' selected' : '')
          + '>' + data[2].operation[0] + '</option>'
          + '<option'
          + ((typeof g_data[select_name] !== 'undefined' && g_data[select_name] === data[2].operation[1]) ? ' selected' : '')
          + '>' + data[2].operation[1] + '</option>';
          + '</select>';

      $('td:eq(1)', row).html(html);
   },
});

$('#test tbody').on('click', 'input[type=checkbox]', function (e){
   g_data[this.name] = this.checked;
});

$('#test tbody').on('change', 'select', function (e){
   if(this.selectedIndex != -1){
      var value = this.options[this.selectedIndex].value;
      g_data[this.name] = value;
   }
});

$('#btn-submit').on('click', function(){
   $('#test-data-json').val(JSON.stringify(g_data));
   console.log($('#test-data-json').val());
});

由于它是新选项和旧选项的组合,因此我对您的代码进行了稍微的更新。但是,我尚未使用aaData属性编辑旧版服务器响应,因此您不必更改服务器端脚本。

基本上,解决方案是使用变量(g_data在我的示例中)存储/检索动态表单控件的状态。

提交表单后,数据将INPUT作为JSON字符串存储在隐藏的元素中。

(可选)如果需要表单验证,请检查存储在g_data变量中的控件的状态

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery datatables在行上导航时,已选择的行数据在分页表上被重置

来自分类Dev

在过滤后的行上分页—重置原始数据集— jQuery Datatables

来自分类Dev

jQuery / Javascript数据表:如何在行选择时将行数据显示到html文本字段中

来自分类Dev

jQuery / Javascript数据表:如何在行选择时将行数据显示到html文本字段中

来自分类Dev

将JSON数据放在JQuery DataTables上

来自分类Dev

在分页jQuery数据表的最后一页上显示一行

来自分类Dev

使用jQuery each()用该行上的按钮提取表行数据

来自分类Dev

jQuery DataTables知道是否已选择表行,如果没有,则在按下按钮时发出警报

来自分类Dev

jQuery选择表行数据的有效方法

来自分类Dev

获取表行数据jQuery

来自分类Dev

jQuery Datatables分页设置

来自分类Dev

jQuery DataTables-添加行会重置分页和过滤

来自分类Dev

jQuery,也会在已选择的选项上触发更改

来自分类Dev

jQuery,也会在已选择的选项上触发更改

来自分类Dev

选择列表上的 jquery 选择

来自分类Dev

悬停时的jQuery在导航菜单上显示子链接

来自分类Dev

如何使用jQuery从数据表中选择按钮单击上的筛选结果

来自分类Dev

jQuery数据表-分页DOM

来自分类Dev

jQuery数据表保持分页排序

来自分类Dev

在jQuery中分页数据表

来自分类Dev

jQuery 前置到数据表分页

来自分类Dev

在点击事件时重置jQuery Raty选择(jQuery)

来自分类Dev

使用 jquery 在 div 上创建分页?

来自分类Dev

在选择的JQUERY上填充输入

来自分类Dev

jQuery数据表-禁止显示行数

来自分类Dev

用jQuery插入表行数据

来自分类Dev

如何使用jQuery获取单击按钮时表的已检查行数?

来自分类Dev

jQuery分页的ajax数据

来自分类Dev

jQuery Datatables多个表

Related 相关文章

  1. 1

    jQuery datatables在行上导航时,已选择的行数据在分页表上被重置

  2. 2

    在过滤后的行上分页—重置原始数据集— jQuery Datatables

  3. 3

    jQuery / Javascript数据表:如何在行选择时将行数据显示到html文本字段中

  4. 4

    jQuery / Javascript数据表:如何在行选择时将行数据显示到html文本字段中

  5. 5

    将JSON数据放在JQuery DataTables上

  6. 6

    在分页jQuery数据表的最后一页上显示一行

  7. 7

    使用jQuery each()用该行上的按钮提取表行数据

  8. 8

    jQuery DataTables知道是否已选择表行,如果没有,则在按下按钮时发出警报

  9. 9

    jQuery选择表行数据的有效方法

  10. 10

    获取表行数据jQuery

  11. 11

    jQuery Datatables分页设置

  12. 12

    jQuery DataTables-添加行会重置分页和过滤

  13. 13

    jQuery,也会在已选择的选项上触发更改

  14. 14

    jQuery,也会在已选择的选项上触发更改

  15. 15

    选择列表上的 jquery 选择

  16. 16

    悬停时的jQuery在导航菜单上显示子链接

  17. 17

    如何使用jQuery从数据表中选择按钮单击上的筛选结果

  18. 18

    jQuery数据表-分页DOM

  19. 19

    jQuery数据表保持分页排序

  20. 20

    在jQuery中分页数据表

  21. 21

    jQuery 前置到数据表分页

  22. 22

    在点击事件时重置jQuery Raty选择(jQuery)

  23. 23

    使用 jquery 在 div 上创建分页?

  24. 24

    在选择的JQUERY上填充输入

  25. 25

    jQuery数据表-禁止显示行数

  26. 26

    用jQuery插入表行数据

  27. 27

    如何使用jQuery获取单击按钮时表的已检查行数?

  28. 28

    jQuery分页的ajax数据

  29. 29

    jQuery Datatables多个表

热门标签

归档