2017-10-16 157 views
1

在表格中,對於跳過日期列,最後一行的默認值將始終爲單詞「last」,而不是數字。現在,結果日期顯示爲「NaN/NaN/NaN」,有沒有什麼方法可以用Nil替代它。如何擺脫NaN/NaN/NaN

非常感謝。

$('input.date, input.day').on('change', function() { 
 
var $row = $(this).closest('tr'); 
 
var start = $row.find('.date').val(); 
 
if (start) { 
 
    var set = new Date(start); 
 
    set.setDate(set.getDate() + Number($row.find(".day").val())); 
 
    $row.find(".result").val([set.getMonth() + 1, set.getDate(), set.getFullYear()].join('/')); 
 
    var dt = set.getFullYear() + "-" + ("0" + (set.getMonth() + 1)).slice(-2) + "-" + ("0" + set.getDate()).slice(-2); 
 
    $row.next('tr').find('.date').attr('value', dt).trigger('change'); 
 
} 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table id="one"> 
 
    <th>Date</th> 
 
    <th>Skip days</th> 
 
    <th>Result</th> 
 
    <tbody> 
 
    <tr> 
 
     <td><input type="date" class="date"></td> 
 
     <td><input type="text" value="10" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 

 
    <tr> 
 
     <td><input type="date" class="date"></td> 
 
     <td><input type="text" value="15" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 

 
    <tr> 
 
     <td><input type="date" class="date"></td> 
 
     <td><input type="text" value="last" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

爲什麼不將''''''''從'text'更改爲'number'?這很有意義,因爲你只需要一個數字輸入。這也將刪除'NAN' – NewToJS

+0

東西是爲跳過日子的最後一行,默認值將是最後一個,它不是一個數字 – epiphany

+0

這裏是一個示例https://jsfiddle.net/1ayn5tng/不知道爲什麼你會有最後的默認值,所以也許我的例子不是你想要的。 – NewToJS

回答

1

在這裏,你去了一個解決方案

$('input.date, input.day').on('change', function() { 
 
    var $row = $(this).closest('tr'); 
 
    var start = $row.find('.date').val(); 
 
    
 
    if (!isNaN($row.find(".day").val()) && start) { 
 
    var set = new Date(start); 
 
    set.setDate(set.getDate() + Number($row.find(".day").val())); 
 
    $row.find(".result").val([set.getMonth() + 1, set.getDate(), set.getFullYear()].join('/')); 
 
    var dt = set.getFullYear() + "-" + ("0" + (set.getMonth() + 1)).slice(-2) + "-" + ("0" + set.getDate()).slice(-2); 
 
    $row.next('tr').find('.date').attr('value', dt).trigger('change'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table id="one"> 
 
    <th>Date</th> 
 
    <th>Skip days</th> 
 
    <th>Result</th> 
 
    <tbody> 
 
    <tr> 
 
     <td><input type="date" class="date"></td> 
 
     <td><input type="text" value="10" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 

 
    <tr> 
 
     <td><input type="date" class="date"></td> 
 
     <td><input type="text" value="15" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 

 
    <tr> 
 
     <td><input type="date" class="date"></td> 
 
     <td><input type="text" value="last" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 
</tbody> 
 
</table>

我用iSNaN檢查input.day

希望這會幫助你。

+0

@tam歡迎好友:) – Shiladitya

+0

哦,還有一個小問題,當我嘗試更改爲跳過一天,開始日期是相同的結果日期,任何想法?,謝謝 – epiphany

+0

我修復它,時區問題 – epiphany

1

您可以隨時手動更新最後一個單元格以覆蓋Null的值,例如:$("#one tbody tr:last-of-type .result")[0].value = 'Nil'

這可以看出,在下面的例子:

$('input.date, input.day').on('change', function() { 
 
    var $row = $(this).closest('tr'); 
 
    var start = $row.find('.date').val(); 
 
    if (start) { 
 
    var set = new Date(start); 
 
    set.setDate(set.getDate() + Number($row.find(".day").val())); 
 
    $row.find(".result").val([set.getMonth() + 1, set.getDate(), 
 
     set.getFullYear() 
 
    ].join('/')); 
 
    var dt = set.getFullYear() + "-" + ("0" + (set.getMonth() + 
 
     1)).slice(-2) + "-" + ("0" + set.getDate()).slice(-2); 
 
    $row.next('tr').find('.date').attr('value', dt).trigger('change'); 
 
    } 
 
    $("#one tbody tr:last-of-type .result")[0].value = 'Nil'; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<table id="one"> 
 
    <th>Date</th> 
 
    <th>Skip days</th> 
 
    <th>Result</th> 
 
    <tbody> 
 
    <tr> 
 
     <td> 
 
     <input type="date" class="date"></td> 
 
     <td><input type="text" value="10" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 

 
    <tr> 
 
     <td> 
 
     <input type="date" class="date"></td> 
 
     <td><input type="text" value="15" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 

 
    <tr> 
 
     <td> 
 
     <input type="date" class="date"></td> 
 
     <td><input type="text" value="last" class="day"> </td> 
 
     <td><input type="text" class="result"> </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

希望這有助於! :)

+0

感謝您的幫助 – epiphany