2012-04-27 90 views
0

我在jquery中有一个函数。我的函数返回一个值,但是当我检查返回值,我得到了“南”可能是什么问题:返回jQuery中的函数的值

[CODE] 

var vax = ('#textbox1').val(); 

var newVal = calculateMB(vax,11,3.1); 
alert(newVal); 

function calculateMB(num,charge,fixed) 
{ 
    if(num>50) 
    var e = num - 50; 
    var new_e = e * charge; 
    new_var = new_e/20; 

    return (new_var + fixed); 


    } 
[/CODE] 
+0

在将值赋给'vax'后立即尝试'alert(vax)'。你可能没有得到你认为你得到的东西。 – 2012-04-27 16:23:30

+0

如果'num> 50',你的函数只返回一个值。这是一个问题。 – 2012-04-27 16:24:56

+0

@JonathanM:不,它总是返回一个值。 'if'只涉及它后面的行。 (非常非常难以阅读的缩进代码就像这样搞砸了。) – 2012-04-27 16:30:05

回答

0

我认为这是因为从文本框中读取的数字是一个字符串。尝试var vax = Number(('#textbox1').val());

-1

尝试

return (Number(new_var + fixed)); 

它蒙上你的变量为一个数字。还要确保传递给calculateMB的参数实际上是数字。

3

您并不总是为e指定一个值,但是您正在计算中使用它。这里的缩进正确代码:

function calculateMB(num,charge,fixed) 
{ 
    if(num>50) 
     var e = num - 50; 

    var new_e = e * charge; 
    new_var = new_e/20; 
    return (new_var + fixed); 
} 

num<= 50,e从来没有得到一个值(因此使用默认undefined保持),所以e * chargeNaNNaN传播经过计算的其余部分。

你可能想:

function calculateMB(num,charge,fixed) 
{ 
    var e, new_e, new_var; 

    e = (num > 50) ? num - 50 : num; 
    new_e = e * charge; 
    new_var = new_e/20; 
    return new_var + fixed; 
} 

变化有:

  1. 我把所有var语句在顶部,因为that's where they really are

  2. 我声明new_var,你根本没有声明,沦为The Horror of Implicit Globals

  3. 我确保e总是得到一个值。我猜你想要enumnum <= 50,但适当调整。

  4. 我一致地缩进了代码。执行一致的代码缩进等操作可帮助您避免错误,并帮助其他人理解您的代码。 强烈推荐

+0

我有同样的想法,但瓦尔正在悬挂...... – brightgarden 2012-04-27 16:25:44

+0

@brightgarden:是的,他们是。 (我没有说他们不是。)'e'仍然是'undefined'。这只是'var'部分,而不是赋值部分。例如'var e = num-50;'变成'var e;',并且'e = num-50;',不是。 – 2012-04-27 16:33:58