复选框(Icheck)限制不适用于数据表中的其他页面,仅适用于第一页

问题描述:

可选复选框的限制仅适用于表的第一页,第一页上,当我到达限制在可选择的复选框中,当我点击分页中的下一页或其他页码并点击另一个复选框时,它不会限制我,我应该怎么做,它也会应用在其他页面上?复选框(Icheck)限制不适用于数据表中的其他页面,仅适用于第一页

这里是我的代码:

$(document).ready(function() { 
    var $datatable = $('#datatable-checkbox'); 

    $datatable.dataTable({ 
     'order': [[1, 'asc']] 
    }); 

    var limit = 2; 

    $datatable.on('draw.dt', function() { 
     $('input').iCheck({ 
      checkboxClass: 'icheckbox_flat-green' 
     }); 
    }); 

    $(".flat").on("ifChecked",function(e) { 
     var checkboxes = $("input:checkbox"); 
     var $this = $(this); 

     if (checkboxes.filter(":checked").length > limit) { 
      swal({ 
       title: "Book Limit Reached", 
       text: "", 
       type: "warning", 
      }); 

      setTimeout(function() { 
       $this.iCheck('uncheck'); 
      }, 1); 
     } 
    }); 
}); 

您需要通过在on()呼叫的第二个参数提供选择使用事件委托,见下面的例子:

$datatable.on('ifChecked', '.flat', function() { 
    // your code here 
}); 

从jQuery的on()方法文档:

委托事件的优点是可以处理ev从 后代添加到文档中的元素。

请参阅jQuery的“直接和委托事件”on()方法文档和jQuery DataTables – Why click event handler does not work以获取更多信息。

此外,您还需要使用​​jQuery DataTable API方法来获取所有复选框的列表,因为除DOM以外的其他页面复选框不会存在。

var checkboxes = $datatable.DataTable().$("input:checkbox"); 
+0

感谢您的快速响应,但我认为我不知道根据您的建议构建我的代码。我一直在尝试它,但我认为我没有这样做:(.. ..对不起,但你可以详细说明更多?或者如果它确定,你可以基于我的代码上面构造正确的代码?..这将帮助我很大。 。谢谢 – Neil0412

+0

我现在明白了,如果终于做到了..非常感谢你!!挫折首先进入了我,而不是完全理解它:)希望别人能够从这篇文章中得到帮助。 – Neil0412

+0

当我通过从不同的不同页面选定的复选框值,并非所有的复选框在表单提交过程中发送?应该怎样解决这个问题? – Neil0412

为他人参考,这是我怎么它的基础上@ Gyrocode.com的建议..

顺便说一句,我用I检查的复选框和sweetalert的弹出窗口/警报

$(document).ready(function() { 
var $datatable = $('#datatable-checkbox'); 

$datatable.dataTable({ 
    'order': [[1, 'asc']] 
}); 

var limit = 2; 

$datatable.on('draw.dt', function() { 
    $('input').iCheck({ 
     checkboxClass: 'icheckbox_flat-green' 
    }); 
}); 

$datatable.on('ifChecked', '.flat', function() { 
    var checkboxes = $datatable.DataTable().$("input:checkbox"); 
    var $this = $(this); 

    if (checkboxes.filter(":checked").length > limit) { 
     swal({ 
      title: "", 
      text: "", 
      type: "warning", 
     }); 

     setTimeout(function() { 
      $this.iCheck('uncheck'); 
     }, 1); 
    } 
});});