Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 DataTables基于一个';s值_Javascript_Jquery_Datatables - Fatal编程技术网

Javascript DataTables基于一个';s值

Javascript DataTables基于一个';s值,javascript,jquery,datatables,Javascript,Jquery,Datatables,我正在尝试创建一个条件语句,它不仅将数据替换为我目标的列,还将替换基于所选目标值的第二个列的数据 setTimeout(function() { $('#invoices-table').DataTable({ responsive: true, columnDefs: [{ orderable: false, targets: [-1, -2, -3] }, { targets: 0, // statement is based on first column

我正在尝试创建一个条件语句,它不仅将数据替换为我目标的列,还将替换基于所选目标值的第二个列的数据

 setTimeout(function() {
  $('#invoices-table').DataTable({
    responsive: true,
    columnDefs: [{ orderable: false, targets: [-1, -2, -3] }, {
      targets: 0, // statement is based on first column data
      render: function(data, type) {
        // if data in col0 is "1" then replace data in col0 and col5 (pay button)
        if (type == 'display' && data == '1') {
          return [
            { data: '<i class="fa fa-3 fa-check-circle-o datatable-paid-1"></i>', target: 0 },
            { data: '<button class="pay-btn btn btn-sm btn-success disabled">Paid</button>', target: 5 }
          ]
        } else {
          return [
            { data: '<i class="fa fa-3 fa-exclamation-circle datatable-paid-0"></i>', target: 0 }
          ]
        }
      },
    }],
    "lengthMenu": [
      [100, 5, 25, 50, -1],
      [100, 5, 25, 50, "All"]
    ],
    dom: 'Bfrtip',
    initComplete: function() {
      var api = this.api();
      // my actions upon complete
    }
  });
 }, 1500); // delay is needed due to needed time of mySQL for passing results
setTimeout(函数(){
$(“#发票表”)。数据表({
回答:是的,
columnDefs:[{orderable:false,目标:[-1,-2,-3]}{
目标:0,//语句基于第一列数据
呈现:函数(数据、类型){
//如果col0中的数据为“1”,则替换col0和col5中的数据(付款按钮)
如果(类型='display'&&data='1'){
返回[
{数据:“”,目标:0},
{数据:'已支付',目标:5}
]
}否则{
返回[
{数据:“”,目标:0}
]
}
},
}],
“长度菜单”:[
[100, 5, 25, 50, -1],
[100,5,25,50,“全部”]
],
dom:'Bfrtip',
initComplete:function(){
var api=this.api();
//我的行动完成了
}
});
}, 1500); // 由于mySQL传递结果需要时间,因此需要延迟

编辑

由于错误的目标编号更新了post和codepen上的代码

如果您按照前面的答案中的建议查看,则您将看到
呈现
回调还有几个参数:

render: function ( data, type, full, meta ) {
columnDefs
中的每个部分都可以有多个目标,但是
targets
指的是列索引,而不是数据!所以你有点搞错了。其含义是:您可以将相同的结果字符串传递给多个列,即在一个回调中使用例如复选框来处理列,但不能在同一
columnDefs
节中区分目标(列)和不同的返回字符串。这没有多大意义,而且很难实施

从逻辑上讲,如果希望不同的列具有不同的值,则使用不同的
columnDefs
节。
full
参数保存行的所有值,因此即使您以列#14为目标,也可以使用
full
检查列#0的值。以下是您应该做的:

columnDefs: [
  { orderable: false, targets: [-1, -2, -3] }, 
  { targets: 0, 
    render: function(data, type) {
      if (type == 'display') {
        return data == '1' 
          ? '<i class="fa fa-3 fa-check-circle-o datatable-paid-1"></i>'
          : '<i class="fa fa-3 fa-exclamation-circle datatable-paid-0"></i>'
      } else {
         return data
      }
    }
  },
  { targets: 14, 
    render: function(data, type, full) {
      if (type == 'display') {
        return full[0] == '1' 
          ? '<button class="pay-btn btn btn-sm btn-success disabled">Paid</button>'
          : '<button class="pay-btn btn btn-sm btn-success">pay</button>'
      } else {
        return data
      }
    }
  }
]
columnDefs:[
{orderable:false,目标:[-1,-2,-3]},
{目标:0,
呈现:函数(数据、类型){
如果(类型==“显示”){
返回数据==“1”
? ''
: ''
}否则{
返回数据
}
}
},
{目标:14,
呈现:函数(数据、类型、完整){
如果(类型==“显示”){
返回完整[0]=“1”
“付费”
:“支付”
}否则{
返回数据
}
}
}
]

正如您所描述的,我现在知道应该在哪个逻辑上工作了。PS:刚刚编辑了我的文章,我在发布的示例中有错误的目标编号,
target:14
(第14列)到
target:5
,如果您也可以为将来的读者更正的话;-)是否
返回完整[0]=“1”?'Paid':data
一个正确的方法,以防在“1”不满足的情况下,我想保留应用程序在该列中默认生成的内容?嘿@VasilisKosmas,是的,我会这么认为。但是您也可以不使用
pay
进行预渲染,因为列可能是空的,这将首先减少要加载的HTML。如果您有500行,您将使用60*500/1024==29kb.davidkonrad减少初始HTML。实际上,根据用户报告的搜索条件,行(从DB获取用于NodeJS应用程序)甚至超过500行,这就是为什么我必须将代码包装在
setTimeout中,3000
因此数据表是在获取记录后启动的。必须显示“付款”按钮,因为它是一个操作按钮,用于在数据库中将当前发票/记录标记为“已付款”。