每次运行时都会出现 NaN 错误?

时间:2021-04-29 19:27:38

标签: javascript html

我听说 NaN 错误是当您尝试将对象作为数字传递时,但在我的 HTML 中,“productquantity”被设置为数字,那么为什么会出现此错误?这些文件与另一个 HTML 文件和另一个 JavaScript 文件一起操作以检索数据,这两个文件显示数据。 'productquantity 是我唯一的障碍,也是出现 NaN 错误的地方。如果您需要其他 HTML 和 Javascript 文件,请告诉我。提前致谢!

grep -n -e '[]?#!*%[]' -e '^ *$' file
"use strict";

function getBooking() {
    var laptopsprice = 0;
    if (sessionStorage.fname != undefined) {    //if sessionStorage for username is not empty
        //confirmation text
        //outputs user details in payment page and stores values to be sent to server in hidden input tags
        document.getElementById("confirm_name").textContent = sessionStorage.fname + " " + sessionStorage.lname;
        document.getElementById("confirm_email").textContent = sessionStorage.email;
        document.getElementById("confirm_phone").textContent = sessionStorage.phone;
        document.getElementById("confirm_streetname").textContent = sessionStorage.streetname;
        document.getElementById("confirm_suburb").textContent = sessionStorage.suburb;
        document.getElementById("confirm_state").textContent = sessionStorage.state;
        document.getElementById("confirm_postcode").textContent = sessionStorage.postcode;
        document.getElementById("confirm_laptops").textContent = sessionStorage.laptops;
        document.getElementById("confirm_productquantity").textContent = Number(sessionStorage.productquantity);
        document.getElementById("confirm_cost").textContent = laptopsprice;
        laptopsprice = totalproductcost(sessionStorage.laptops, Number(sessionStorage.productquantity));
        
        
        //values for hidden input tags that send data to the server
        document.getElementById("a_name").value = sessionStorage.fname + " " + sessionStorage.lname;
        document.getElementById("a_email").value = sessionStorage.email;
        document.getElementById("a_phone").value = sessionStorage.phone;
        document.getElementById("a_streetname").value = sessionStorage.streetname;
        document.getElementById("a_suburb").value = sessionStorage.suburb;
        document.getElementById("a_state").value = sessionStorage.state;
        document.getElementById("a_postcode").value = sessionStorage.postcode;
        document.getElementById("a_laptops").textContent = sessionStorage.laptops;
        document.getElementById("a_productquantity").textContent = Number(sessionStorage.productquantity);
        document.getElementById("a_cost").value = laptopsprice;
    }
 }


function totalproductcost(laptops , productquantity) {
    var laptopsprice;
    if (laptops == "Workstation_Laptop") {
        laptopsprice = (productquantity * 2499);
    } else if (laptops == "Gaming_Laptop") {
        laptopsprice = (productquantity * 1789);
    } else if (laptops == "Laptop_Stand") {
        laptopsprice = (productquantity * 64);
    } else if (laptops == "Office_Laptop") {
        laptopsprice = (productquantity * 1499);
    }  
    return laptopsprice;
}



 function cancelBooking(){
    window.location = "enquiries.html";
    sessionStorage.clear();
}
//function for invoking getbooking and validate, cancel booking
function init() {
    document.getElementById("paymentform").onsubmit = validate;
    document.getElementById("cancelpurchase").addEventListener("click", cancelBooking);
    getBooking();//invokes getbooking function
}
//invokes init fuction on window load
window.onload = init;

2 个答案:

答案 0 :(得分:3)

每当您检索或设置一个值以进入 html 标记或表单元素时,它都是一个字符串。即使您将该项目转换为 Number(),DOM 也会将其存储为字符串。每当要在计算中使用该字符串时,将其转换为数字,然后使用加号运算符 parseInt 或 parseFloat,如下所示:

function totalproductcost(laptops , productquantity) {
    productquantity = +productquantity;
    // OR productquantity = parseInt(productquantity);
    // OR productquantity = parseFloat(productquantity); if you have a decimal to consider

    var laptopsprice;
    if (laptops == "Workstation_Laptop") {
        laptopsprice = (productquantity * 2499);
    } else if (laptops == "Gaming_Laptop") {
        laptopsprice = (productquantity * 1789);
    } else if (laptops == "Laptop_Stand") {
        laptopsprice = (productquantity * 64);
    } else if (laptops == "Office_Laptop") {
        laptopsprice = (productquantity * 1499);
    }  
    return laptopsprice;
}

答案 1 :(得分:1)

您可能需要检查两件事。

一个是 productquantity 有一个值。如果未定义或为空,Number 将返回 NaN。

另一个是如果 productquantity 设置为字符串,则该字符串不包含非数字字符。