2

次のスクリプトがあります。私が最初にそれを書いたとき、それは完璧に機能しました。次に、ページをロードしましたが、ページが壊れて永久に戻ってきNaNました。コンソールで正常に実行できますが、何らかの理由でサイトで正しく機能しません。Railsアプリケーションの内部で動作しています。

$(document).ready(function(){
  $('select').click(function(){
    var often = parseInt($('#biohaz_frequency_often').val());
    var time = parseInt($('#biohaz_frequency_time').val());
    var timeoften = often * time
    if(timeoften == 0){
      var freq = 0;
    }
    else if(timeoften <= 2){
      var freq = 1;
    }
    else if(timeoften <= 4){
      var freq = 3;
    }
    else if(timeoften <= 9){
      var freq = 6;
    }
    else if(timeoften > 9){
      var freq = 10;
    }
    var sever = parseInt($('#biohaz_risk_severity').val());
    var master = parseInt($('#biohaz_risk_mastery').val());
    $('#risk_frequency').html(freq);
    $('#risk_total').html(freq * sever * master);
  })
})
4

2 に答える 2

1

この診断を実行します。

$(document).ready(function(){
  $('select').click(function(){
    var often = parseInt($('#biohaz_frequency_often').val());
    var time = parseInt($('#biohaz_frequency_time').val());
    var sever = parseInt($('#biohaz_risk_severity').val());
    var master = parseInt($('#biohaz_risk_mastery').val());
    alert([often, time, sever, master].join());
  });
});

これにより、4 つの変数のうちどれが NaN であるかがわかります。

また (これは重要かもしれませんが)、$('select').click(...)かなり珍しいことです。私は見ることを期待しています$('select').on('change', ...)clickNaN を使用すると、数値以外が計算に使用された結果である可能性が高くなります。HTMLを見ないと何とも言えません。

最善の方法は、有効なオプションを選択して 4 つの select 要素すべてを (HTML で) 初期化し、次のようにコーディングすることです。

$(document).ready(function(){
    //cache of static jQuery objects
    var $$ = {
        'often':     $('#biohaz_frequency_often'),
        'time':      $('#biohaz_frequency_time'),
        'sever':     $('#biohaz_risk_severity'),
        'master':    $('#biohaz_risk_mastery'),
        'frequency': $('#risk_frequency'),
        'total':     $('#risk_total')
    };
    $('select').on('change', function(){
        var often = parseInt($$.often.val()),
            time = parseInt($$.time.val()),
            sever = parseInt($$.sever.val()),
            master = parseInt($$.master.val()),
            ot = often * time,//keep this member name short, it's about to be used 4 times in the next line
            freq = (ot == 0) ? 0 : (ot <= 2) ? 1 : (ot <= 4) ? 3 : (ot <= 9) ? 6 : 10;
        $$.frequency.html(freq);
        $$.total.html(freq * sever * master);
    }).trigger('change');//call the handler immediately, with initially selected options
});
于 2012-10-17T21:19:27.760 に答える
0

ベニーの回答と1秒前にここにあった削除された回答に基づいて、jsfiddleの簡単な例をまとめました-うまくいくようです:

http://jsfiddle.net/Qr5eF/1/

答えを導くのに役立つ独自のhtmlを提供できれば。

編集: 元の 2 つの ID を間違って入力したため、新しい jsfiddle に更新されました。おっとっと!

于 2012-10-17T21:09:58.110 に答える