【问题标题】:NaN Javascript & Jquery error when trying to concatinate a number and a string尝试连接数字和字符串时出现 NaN Javascript 和 Jquery 错误
【发布时间】:2015-03-13 16:47:33
【问题描述】:

我正在尝试实现以下代码,但返回到页面上 id 的值填充了 NaN(非数字)错误。有没有人有任何建议我可以在这里做什么?我已经为此奋斗了一个多小时,希望您能提供帮助。

setInterval( function(){ 
    var b = $('input#ien_val').val();
    var ien;
    for (ien = 0; ien < b; ien++) {
        var encuser = parseInt($('#enutt'+ien).html()); 
        var enteam = parseInt($('#enttotalday'+ien).html()); 
        var enoffset = (encuser/enteam)*100;
        $('#tten' + ien).html(enoffset + '%');
    }
},2000);

根据下面的 cmets,我在这里添加了一个问题示例 http://jsbin.com/tobilonepu/1/

【问题讨论】:

    标签: javascript jquery nan


    【解决方案1】:

    由于您正在执行算术运算,因此您需要确保您拥有的值是 Number/integer/float 而不是 string.val() 通常会给你一个string

    替换:

    var encuser = $('#enutt'+ien).val(); 
    var enteam = $('#enttotalday'+ien).val(); 
    

    与:

    var encuser = Number($('#enutt'+ien).val()); 
    var enteam = Number($('#enttotalday'+ien).val()); 
    

    您可以根据需要使用parseInt()parseFloat() 而不是Number()

    阅读:

    【讨论】:

    • 我尝试过 Number() 和 parseInt(),我没有尝试过 parseFloat,所以试了一下 - 我仍然遇到 NaN 错误...它通过了 % 符号回到 的 id 值,但不是数值... 想法?
    • @Kai 试试parseFloat。值中有任何特殊字符吗?这些函数需要一个有效数字。
    • 当我试图返回一个包含 % 符号的字符串时,除了末尾之外没有特殊字符...在这里查看...jsbin.com/tobilonepu/1
    • @Kai 你在你的 jQuery 代码中提到了错误的总 ID。将$('#enttotalday'+ien) 替换为$('#enttotalday')。看到这个更新的 jsBin:jsbin.com/xasidewari/1
    【解决方案2】:

    您必须先将 encuser 和 enteam 转换为数字。试试这样的

    setInterval( function(){ 
        var b = $('input#ien_val').val();
        var ien;
        for (ien = 0; ien < b; ien++) {
            var encuser = parseFloat($('#enutt'+ien).val()); 
            var enteam = parseFloat($('#enttotalday'+ien).val()); 
            var enoffset = (encuser/enteam)*100;
            $('#tten' + ien).html(enoffset + '%');
        }
    },2000);
    

    阅读有关 parseInt、parseFloat 和 Number 的更多信息:

    更新

    工作:http://jsbin.com/mezamakopi/2/edit

    【讨论】:

    • 我已经尝试过 Number() 和 parseInt(),我没有尝试过 parseFloat,所以只是试了一下 - 我仍然收到 NaN 错误...它通过了 % 符号回到 的 id 值,但不是数值... 想法?
    • @Kai 知道了!您的标记有误,“ien”-iterator 应该从 1 jsbin.com/mezamakopi/2/edit 开始
    【解决方案3】:

    您应该将 dom 值解析为使用 parseIntparseFloat 的数字。基于此,代码应如下所示。

    setInterval( function(){ 
        var b = $('input#ien_val').val();
        var ien;
        for (ien = 0; ien < b; ien++) {
            // add parseInt
            var encuser = parseInt($('#enutt'+ien).val());
            // add parseInt
            var enteam = parseInt($('#enttotalday'+ien).val()); 
    
            var enoffset = (encuser/enteam)*100;
            $('#tten' + ien).html(enoffset + '%');
        }
    },2000);
    

    希望对您有所帮助。干杯。

    【讨论】:

    • 我在之前的尝试中尝试过 Number() 和 parseInt() 来调试这些 var,在此处发布之前,我没有尝试 parseFloat 所以只是试一试 - 我是仍然出现 NaN 错误...它将 % 符号传递回 的 id 值而不是数值... 想法?
    • 您能否用代码的真实示例更新您的问题,以便我可以帮助您调试它?
    【解决方案4】:

    您正在尝试遍历$('#enttotalday'+ien),但那里只有一个值,因此它会导致问题。工作代码:

    setInterval( function(){ 
        var b = $('input#ien_val').val();
        var ien;
        for (ien = 1; ien < b; ien++) {
            // add parseInt
            var encuser = parseInt($('#enutt'+ien).val());
            // add parseInt
            var enteam = parseInt($('#enttotalday').val()); 
    
            var enoffset = (encuser/enteam)*100;
            $('#tten' + ien).html(enoffset + '%');
        }
    },2000);
    

    jsbin 在这里 - http://jsbin.com/nivoxuwufa/1/

    【讨论】:

    • 不用担心。有时你可以接近事物而错过一些小事。很高兴为您提供帮助
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签