空值导致NaN结果

时间:2016-09-26 00:10:12

标签: javascript jquery html

当输入字段为空时,我的表单会显示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();
        }
    });
});
&#13;
<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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分: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">,现代浏览器会显示用于增加和减少输入字段中数字的控件。

答案 1 :(得分: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将显示“无值”。