2012-04-27 94 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