【问题标题】:Javascript testing for NaNNaN 的 Javascript 测试
【发布时间】:2013-10-15 22:10:36
【问题描述】:

在用户在数量、价格和付款字段中输入数字后,下面的代码块会要求服务器提供调整后的帐户余额。将--10 添加到字段会在服务器上引发错误。这就是为什么我添加了 NaN 检查adjustment === adjustment。这样,它应该只在调整量是数字时才发送请求。但由于某种原因,我仍然收到一些奇怪的东西被发送到服务器,比如--10...

本质上,我只需要在请求实际上是一个数字时发送它。

var quantity = $("#id_quantity").val();
    var price = $("#id_price").val();
    var payment = $("#id_payment_amount").val();
    var adjustment = quantity * price - payment;
    // Don't send if Not a number (NaN).
    if (adjustment === adjustment) {
        $.get("/balance_after_adjustment", {amount: adjustment}, function(response) {
            $("span").text(response);
        });
    }

【问题讨论】:

  • 您将值作为字符串获取,然后对它们进行数学计算。我建议使用parseFloatparseInt 单独解析每个项目,这样您可以在尝试对其进行任何计算之前先获得好的数字。
  • 不过,不要忘记在服务器端测试amount。否则一些“黑客”可能会克服 Javascript 检查。
  • @JoeEnos 我看不出这会如何改变任何事情。无论如何,运算符都会隐式转换为数字。而且我不会在用户输入上使用parse 函数;一元 + 运算符或 Number() 函数更有意义
  • @JoeEnos 我绝对同意你的最后一条评论——你没有提到测试每一个并报告任何失败,我不确定这是否是 OP 想要的......尽管如此,一个很好的建议。我的另一点是 parse 函数忽略任何尾随的非数字字符,而一元 + 运算符和 Number() (它们做同样的事情)不会。在处理用户输入时,可能需要也可能不需要忽略尾随字符,但我想指出这一点。我想不出很多/任何场景应该使用parse 函数而不是+

标签: javascript ajax jquery nan


【解决方案1】:

在语句前放一个+,这样val方法返回的字符串将被转换为整数

var quantity = +$("#id_quantity").val(),
    price = +$("#id_price").val(),
    payment = +$("#id_payment_amount").val();

【讨论】:

    【解决方案2】:

    我可能会尝试这样的事情

    var quantity = parseInt($("#id_quantity").val(),10),
     price = parseInt($("#id_price").val(),10),
     payment = parseInt($("#id_payment_amount").val(),10),
     adjustment = quantity * price - payment;
    if (!isNaN(adjustment)) {
        $.get("/balance_after_adjustment", {amount: adjustment}, function(response) {
            $("span").text(response);
        });
    }
    

    【讨论】:

    • 没有这样的 isNaN() 方法。
    • 抱歉,错字现已修正
    猜你喜欢
    • 2015-07-30
    • 2021-02-13
    • 2011-01-09
    • 2019-05-12
    • 2012-07-06
    • 2011-02-13
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多