Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery在简单计算时返回NaN_Jquery_Nan - Fatal编程技术网

jQuery在简单计算时返回NaN

jQuery在简单计算时返回NaN,jquery,nan,Jquery,Nan,我有以下脚本。当我最初写它的时候,它工作得非常好。然后我加载了页面,页面已经损坏,并且永久性地返回NaN。我能够在控制台中成功运行它,但由于某些原因,它无法在站点上正常工作。它在rails应用程序内部运行 $(document).ready(function(){ $('select').click(function(){ var often = parseInt($('#biohaz_frequency_often').val()); var time = parseInt

我有以下脚本。当我最初写它的时候,它工作得非常好。然后我加载了页面,页面已经损坏,并且永久性地返回
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);
  })
})
$(文档).ready(函数(){
$('select')。单击(函数(){
var-frequency=parseInt($('#biohaz_frequency_-frequency').val());
var-time=parseInt($('biohaz_-frequency_-time').val();
var timefarment=经常*时间
if(timefrequency==0){
var-freq=0;
}

else if(timefrequency我刚刚根据benny的答案和刚才删除的答案为您准备了一个JSFIDLE的快速示例-它似乎有效:

如果您可以提供自己的html,这将帮助您找到答案

编辑:更新为新的JSFIDLE,因为我在原始文件中输入了两个ID。哎呀!

运行此诊断:

$(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());
  });
});
这将告诉您四个变量中哪一个是NaN

另外(这可能很重要),
$('select')。单击(…)
是非常不寻常的。我希望看到
$('select')。在('change',…)
上。使用
单击
时,您的NaN更可能是非数值计算的结果。如果不看到HTML,我无法确定

最佳策略是确保所有四个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
});
$(文档).ready(函数(){
//静态jQuery对象的缓存
var$$={
'经常':$('生物危害'频率'),
“时间”:$(“生物危害频率时间”),
“严重性”:(“#biohaz_风险_严重性”),
“大师”:美元(“#biohaz_risk_mastery”),
“频率”:$(“风险频率”),
“总计”:$(“风险总计”)
};
$('select')。在('change',function()上{
var-frequency=parseInt($$.frequency.val()),
time=parseInt($$.time.val()),
sever=parseInt($$.sever.val()),
master=parseInt($$.master.val()),
ot=frequency*time,//保持此成员名称简短,它将在下一行中使用4次

freq=(ot==0)?0:(ot您可以创建一个JSFIDLE或提供它所附带的HTML吗?在
var timefarmy=frequent*time
之后缺少一个分号。老实说,如果这是由
var master=parseInt($('biohaz_risk_mastery').val()行上的输入错误引起的,我不会感到惊讶。)
-应该
#biohaz_risk_mastery
#biohaz_risk_master
?我运行了诊断,它们都在0,0,0,0返回。我将尝试按照您的建议使用on('change')我是新来的,这看起来是一个更好的方法。我真的很感谢你的帮助。第一次在这里问问题。这是有回报的。工作很有魅力。谢谢你帮我解决这个问题!不用担心,这是我的荣幸。你应该看到一个按钮或链接,我的答案允许你接受它…这是一件好事。