javascript - 函数不进入else

标签 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>

最佳答案

您的 html 没有 tbody,首次执行时返回 null

尝试包含 tbody

<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/

关于javascript - 函数不进入else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871306/

相关文章:

javascript - 将消息添加到输入或下方

javascript - 获取最长的单词 - JS

javascript - 我的图像元素和 React 的源问题

javascript - 使用 setTimeout 连续异步/等待

javascript - 尝试淡入 .css ('background-image",__)

javascript - 旋转后获取元素的顶部和左侧位置

javascript - 是否有 html "for"属性事件标志?

javascript - 从接口(interface)声明中访问静态属性

javascript - 使用 Java rest api 在 javascript 中发布请求不起作用

javascript - onClick 时 react 删除元素