2012-08-09 228 views
0
var num1 = $("input[id='weight']").val(), 
    num2 = $("input[id='height']").val(), 
    result = num1/(num2*num2); 

$("#submit").click(function() { 
    $(".result").text(result); 
}); 

它只是显示结果应该是NaN。为什么?与jQuery做数学运算

回答

2
$(function(){ 
    $("#submit").click(function() { 
     var num1 = $("#weight").val(), 
      num2 = $("#height").val(), 
      result = num1/(num2 * num2); 
     $(".result").text(result); 
    }); 
}); 

一点解释:

问题不是parseInt函数在这里。恕我直言,问题是,在数学的时刻两个瓦尔是空的,或者不是一个数字......

+0

注:选择器'#weight'与'input [id ='weight']'不同。甚至没有'输入#权重'也完全一样。 – Guffa 2012-08-09 12:42:08

+0

,我们赢了!非常感谢大家! – 2012-08-09 12:44:23

+0

@Guffa:我的假设是每个页面应该是唯一的每个页面? – 2012-08-09 12:44:57

0

将它们转换为整数(假设你使用的整数):

var num1 = parseInt($("#weight").val(), 10), 
    num2 = parseInt($("#height").val(), 10), 
    result = num1/(num2*num2); 
+0

注意:选择器'#weight'与'input [id ='weight' ]'。甚至没有'输入#权重'也完全一样。 – Guffa 2012-08-09 12:42:43

0

试试这个

var num1 = parseInt($("input[id='weight']").val()); 
num2 = parseInt($("input[id='height']").val()); 
result = num1/(num2*num2); 

$("#submit").click(function() { 
$(".result").text(result); 
}); 
+0

我会建议总是指定基数 – 2012-08-09 12:53:00

4

你应该得到的点击事件里面的值,而不是在页面加载时:

$("#submit").click(function() { 
    var num1 = $("input[id='weight']").val(), 
    num2 = $("input[id='height']").val(), 
    result = num1/(num2*num2); 
    $(".result").text(result); 
}); 

还有,为什么你会NaN的结果一些其他的原因:

  • 高度场计算结果为零。 (虽然通常会给出结果Infinity而不是NaN。)

  • 某些字段包含某些不能转换为数字的内容。

  • 您在代码中使用了错误的名称,所以实际上并没有从字段中获取值。

  • 您正在使用具有错误小数点分隔符的浮点数,例如,当浏览器期望0,5时,反之亦然。

一些注意事项:

  • 它使用parseIntparseFloat(这曾经是合适的)做计算之前解析字符串很好的做法。

  • 考虑如果使用像input#weight这样的选择器或只是#weight可以工作。如果在页面中有多个具有相同ID的元素,则只需使用input[id='weight']之类的选择器即可,不建议这样做。

+0

+1,我知道这是如此的耻辱,但我现在发现,0生产NaN! =) – 2012-08-09 13:07:48