0

jqueryに関数があります。関数は値を返しますが、戻り値を確認すると、「NAN」が表示されました。これが問題になる可能性があります。

[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]
4

3 に答える 3

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 * chargeは、残りの計算全体NaNNaN伝播します。

あなたはおそらく欲しい:

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ステートメントを一番上に置きます。それが実際にそこにあるからです。

  2. 私はnew_var、あなたがまったく宣言していなかった、暗黙のグローバルの恐怖の餌食になると宣言しました。

  3. e常に値が割り当てられるようにしました。いつになりたかったと思いますがe、必要に応じて調整してください。numnum <= 50

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

于 2012-04-27T16:24:55.673 に答える
0

テキストボックスから読み取っている数字が文字列だからだと思います。試すvar vax = Number(('#textbox1').val());

于 2012-04-27T16:25:46.120 に答える
-1

試す

 return (Number(new_var + fixed));

変数を数値としてキャストします。また、calculateMBに渡されるパラメーターが実際には数値であることを確認してください。

于 2012-04-27T16:24:14.823 に答える