函数不输入其他

时间:2019-07-03 13:29:15

标签: javascript

我正在datatables表中使用以下函数。

function novaData(d){
   var dia  = d.getDate().toString();
   dia = (dia.length == 1) ? '0'+dia : dia;
   var mes  = (d.getMonth()+1).toString();
   mes = (mes.length == 1) ? '0'+mes : mes;
   var ano = d.getFullYear();
   return dia+"-"+mes+"-"+ano;
}

  class CellDate{
    constructor( start_date ){
        this.date = start_date;
    }
getNextDate(){
   if($('#user_data tbody tr').length){
      var ultima_data = $("#user_data tbody tr:first td:first").text().trim().split("-");
      var ultimo_dia = +ultima_data[0];
      var ultimo_mes = +ultima_data[1];
      var ultimo_ano = +ultima_data[2];
      this.date.setDate(ultimo_dia);
      this.date.setMonth(ultimo_mes-1);
      this.date.setYear(ultimo_ano);
      this.date.setDate( this.date.getDate()+1);
   }else{
      this.date.setMonth(this.date.getMonth()+1);
      this.date.setDate(1);
   }
   return  novaData(this.date);
}
}

  var DateIndexer = new CellDate(new Date(Date.now()));

$('#add').click(function(){

   var html = '<tr>';
   html += '<td contenteditable id="data1">'+DateIndexer.getNextDate()+'</td>';
   html += '<td contenteditable id="data2"></td>';
   html += '<td contenteditable id="data3"></td>';
   html += '<td contenteditable id="data4"></td>';
   html += '<td contenteditable id="data5"></td>';
   html += '<td><button type="button" name="insert" id="insert" class="btn btn-success btn-xs"><span class="glyphicon glyphicon-send"></span></button></td>';
   html += '</tr>';
   $('#user_data tbody').prepend(html);
  });

getNextDate中的类中,当它为true(表已经有行)时,创建新行将用已经输入的最后一行的第二天的日期填充日期字段。

但是,如果该表未插入任何行,则它将返回日期字段NaN-NaN-NaN,因为它没有输入else

如果将console.log(DateIndexer.getNextDate());放在函数$('#add').click(function(){的前面,则会返回01-08-2019

但是如果将console.log(DateIndexer.getNextDate());放在函数$('#add').click(function(){中,则会返回NaN-NaN-NaN

#user_data

<div class="container box">
   <h3 align="center">MAPA DE TRABALHO</h3>
   <h5 align="center">Ajudante de Ação Direta - Turno: Manhã</h5>
   <br />
   <div class="table-responsive">
   <br />
    <div align="right">
     <button type="button" name="add" id="add" class="btn btn-info"><span class="glyphicon glyphicon-plus"></span></button>
    </div>
    <br />
    <div id="alert_message"></div>
    <table id="user_data" class="table table-bordered table-striped">
     <thead>
      <tr>
       <th>Data</th>
       <th>Resp. de Turno</th>
       <th>Apoio</th>
       <th>Elementos ALA A</th>
       <th>Elementos ALA B</th>
       <th></th>
      </tr>
     </thead>
    </table>
</div>
</div>
</div>

1 个答案:

答案 0 :(得分:1)

您的html没有tbody,在您第一次执行时返回null

尝试包含躯干

<table id="user_data" class="table table-bordered table-striped">
    <thead>
     <tr>
      <th>Data</th>
      <th>Resp. de Turno</th>
      <th>Apoio</th>
      <th>Elementos ALA A</th>
      <th>Elementos ALA B</th>
      <th></th>
     </tr>
    </thead>
    <tbody>
    </tbody>
</table>

这将在此处修复您的代码:

$('#add').click(function(){

   var html = '<tr>';
   html += '<td contenteditable id="data1">'+DateIndexer.getNextDate()+'</td>';
   html += '<td contenteditable id="data2"></td>';
   html += '<td contenteditable id="data3"></td>';
   html += '<td contenteditable id="data4"></td>';
   html += '<td contenteditable id="data5"></td>';
   html += '<td><button type="button" name="insert" id="insert" class="btn btn-success btn-xs"><span class="glyphicon glyphicon-send"></span></button></td>';
   html += '</tr>';
   $('#user_data tbody').prepend(html); //<--- right here

});

您也需要检查您在if上的情况,因为在第一次执行时tbody为空,请更改为此内容

class CellDate {
    constructor(start_date) {
        this.date = start_date;
    }
    getNextDate() {
   //here the change for if condition     
   if ($('#user_data tbody tr') != null && $('#user_data tbody tr').length > 0) {
            var ultima_data = $("#user_data tbody tr:first td:first").text().trim().split("-");
            var ultimo_dia = +ultima_data[0];
            var ultimo_mes = +ultima_data[1];
            var ultimo_ano = +ultima_data[2];
            this.date.setDate(ultimo_dia);
            this.date.setMonth(ultimo_mes - 1);
            this.date.setYear(ultimo_ano);
            this.date.setDate(this.date.getDate() + 1);
            console.log('if', this.date);
        } else {
            this.date.setMonth(this.date.getMonth() + 1);
            this.date.setDate(1);
            console.log('else', this.date);
        }
        return novaData(this.date);
    }
}

在此处https://jsfiddle.net/nzb0tdjq/

编码