2016-09-26 61 views
1

當輸入字段爲空時,我的表單顯示NaN。你能幫我解決這個問題嗎?這裏是我的代碼:空值導致NaN結果

function dailyRate() { 
 
    var monthlyRate = parseInt(document.getElementById("txt1").value); 
 
    var months = 12; 
 
    var workingDays = parseInt(document.getElementById("txt2").value); 
 
    var totalDailyRate = (monthlyRate * months)/workingDays; 
 
    document.getElementById("totalRate").innerHTML = Math.round(totalDailyRate); 
 
} 
 

 
$(document).ready(function() { 
 
    $("#mainForm").submit(function(e){ 
 
     e.preventDefault(); 
 
    }); 
 
    $("#txt2, #txt1").keydown(function (e) { 
 
     // Allow: backspace, delete, tab, escape, enter and . 
 
     if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 || 
 
      // Allow: Ctrl+A 
 
      (e.keyCode == 65 && e.ctrlKey === true) || 
 
      // Allow: Ctrl+C 
 
      (e.keyCode == 67 && e.ctrlKey === true) || 
 
      // Allow: Ctrl+X 
 
      (e.keyCode == 88 && e.ctrlKey === true) || 
 
      // Allow: home, end, left, right 
 
      (e.keyCode >= 35 && e.keyCode <= 39)) { 
 
      // let it happen, don't do anything 
 
       return; 
 
     } 
 
     // Ensure that it is a number and stop the keypress 
 
     if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 
 
      e.preventDefault(); 
 
     } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<form name="mainForm" id="mainForm" action="" onsubmit="return dailyRate()" method="post"> 
 
<input type="text" id="txt1" name="text1" placeholder="monthlyrate"> 
 
<input type="text" id="txt2" name="text2" placeholder="workingDays"> 
 
<p id="alerttext"></p> 
 
<button>Submit</button> 
 
<p id="totalRate"></p> 
 
</form>

+0

'NaN'不是錯誤。它應該做什麼呢? – Xufox

+0

是的,當你輸入一個空值時,如何管理這個NaN? – Jemai

+0

你還沒有回答我的問題。 _它應該怎麼做?_處理它_how_?管理這個_how_?當輸入字段爲空時應該發生什麼? – Xufox

回答

0

檢查值NaN與否。如果是NaN,也可以將該值設置爲0或顯示錯誤消息:

var textField1 = document.getElementById("txt1"); 
var textField2 = document.getElementById("txt2"); 

var monthlyRate = parseInt(textField1.value); 
var workingDays = parseInt(textField2.value); 

if (isNaN(monthlyRate)) { 
    textField1.value = 0; 
    monthlyRate = 0; 
} 

if (isNaN(workingDays)) { 
    textField2.value = 0; 
    monthlyRate = 0; 
} 

OR:

if (isNaN(totalDailyRate)) { 
    document.getElementById("totalRate").innerHTML = "Please enter valid numbers"; 
} else { 
    document.getElementById("totalRate").innerHTML = Math.round(totalDailyRate); 
} 

建議:如果您使用<input type="number">,現代瀏覽器增加顯示控件和減少輸入字段中的數字。

0

函數parseInt()如果內容不是數字,則返回NaN,在您的情況下,如果控件爲空,getElementById的返回將返回一個空字符串。所以,或許你應該使用它,像以前一樣執行一些驗證:

var monthlyRate = parseInt(document.getElementById("txt1").value); 
var months = 12; 
var workingDays = parseInt(document.getElementById("txt2").value); 

if (isNaN(monthlyRate) || isNaN(workingDays)) { 
    document.getElementById("totalRate").innerHTML = 'No value'; 
    return; 
} 

在上面的例子中,如果任何值無效,則totalRate會顯示「沒有價值」。

+0

好吧它的工作,但我有另一個條件,如果我寫了一段時間'如果(monthlyRate == null && workingDays == null){ window.alert(「請輸入一個值」); }' 但它不起作用。 – Jemai

+0

我不知道如何編寫它,但如果控件爲空,則document.getElementById不會返回null。你可以做類似'function checkEmpty(id,field){if(document.getElementById(id).trim()===''){alert(field +'has no value');返回false; }返回true; }' –