2012-04-27 29 views
0

jqueryに関数があります。私の関数は値を返しますが、私は戻り値をチェックすると、私は「NAN」何が問題になる可能性があるだ: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) 'を試してみてください。あなたが思っているものが得られていないかもしれません。 –

+0

関数は 'num> 50'の場合にのみ値を返します。それは問題だ。 –

+0

@JonathanM:いいえ、常に値を返します。 'if'はそれに続く行にのみ関係します。 (非常に難しいのは、字下げをしてコードを読むのが大変です。) –

答えて

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); 
} 

numeが値を取得していない(ので、デフォルトundefinedにとどまる)決して、<= 50であるときは、そのe * chargeNaNあるとNaNは、計算の残りの部分を通って伝播します。

おそらくたい:そこ

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. を私はthat's where they really areので、一番上にすべてのvar文を置きます。

  2. あなたが全く宣言していなかったnew_varは、The Horror of Implicit Globalsに落ちると宣言しました。

  3. には必ず値が割り当てられます。 eがのときはnumになるようにしたいと思っていましたが、それを適切に調整してください。

  4. コードを一貫してインデントしました。一貫したコードインデントのようなことをすることは、バグを避け、他の人があなたのコードを理解するのを助けます。 強くをお勧めします。

+0

私は同じ考えを持っていましたが、ヴァルスは吊り下げられています... – brightgarden

+0

@brightgarden:はい、そうです。 (私は彼らがそうではないと言っていませんでした。) 'e'はまだ' undefined 'になります。それは譲渡部分ではなく、 'var'部分だけです。たとえば、 'var e = num-50;'は 'var e;'となり、 'e = num-50;'となります。 –

関連する問題