为什么我得到NaN值?

时间:2016-12-29 06:32:14

标签: javascript jquery json

我的jQuery是:

$("#listDB").on("change", ".qfStyle", function(event) {
    var id = $(this).parents("tr").find('.itemCbox').val();
    $qnty = $("#qnty"+id);
    $unit = $("#unit"+id);
    $price = $("#price"+id);

    if($(this).parents("tr").find('.pbo').text()=="Kilos")
    {
        if(this.value<1)
        {
            $qnty.text(this.value*1000);
            $unit.text("gm");

            var data = "action=getPrice&id="+id;
            $.post("addBill.php", data, function(json) {
                alert(json.price);
                $price.text(json.price*this.value);
            }, 'json');
        }
    }
});

服务器返回的JSON数据是:

  

{ “价格”: “52.00”}

此处,this指的是文本框。我得到表达式的值NaN

$price.text(json.price*this.value);

但我确保this.valuejson.price都是数字。那么,为什么当我乘以NaN时会得到NaN?

2 个答案:

答案 0 :(得分:8)

问题是this不在post函数的范围内。

检查以下代码。我添加了一个新变量value,其中包含this.value的值,即使在post函数中也应该可用。

$("#listDB").on("change", ".qfStyle", function(event) {
    var id = $(this).parents("tr").find('.itemCbox').val();
    $qnty = $("#qnty"+id);
    $unit = $("#unit"+id);
    $price = $("#price"+id);

    var value = this.value;

    if($(this).parents("tr").find('.pbo').text()=="Kilos")
    {
        if(value<1)
        {
            $qnty.text(value*1000);
            $unit.text("gm");

            var data = "action=getPrice&id="+id;
            $.post("addBill.php", data, function(json) {
                alert(json.price);
                $price.text(json.price*value);
            }, 'json');
        }
    }
});

答案 1 :(得分:0)

您可以使用Number()将字符串编号提取为数字格式。

&#13;
&#13;
function getStringNumber(stringNumber){
  var formatNumber = Number(stringNumber);
  console.log(formatNumber);
}
&#13;
<html>
<button onclick="getStringNumber('24.00')"> Convert String Number </button>  
</html>
&#13;
&#13;
&#13;