Целочисленное значение JavaScript для строковой ошибки - PullRequest
0 голосов
/ 20 августа 2011

Очень жаль, если вы уже прошли через это со мной. Хорошие новости: я добился прогресса. Плохая новость: это сломанный прогресс.

У меня есть функция, которая считает с определенного числа. Это большое число, и мне нужно вставить запятые в правильных местах. Вот код, который я собрал. Сначала работает, но потом показывает NaN ...

Http: //jsfiddle.net/blackessej/TT8BH/7/

function createCounter(elementId,start,end,totalTime,callback)
{
    var jTarget=jQuery("#"+elementId);
    var interval=totalTime/(end-start);
    var intervalId;
    var current=addCommas(start)+'';
    var f=function(){
        jTarget.text(current);
        if(current==end)
        {
            clearInterval(intervalId);
            if(callback)
            {
                callback();
            }
        }
        ++current;
    }
    intervalId=setInterval(f,interval);
    f();
}
jQuery(document).ready(function(){
    createCounter("counter",12714086,9999999999,10000000000000,function(){
        alert("finished")
    })
})

function addCommas(str) {
    var amount = new String(str);
    amount = amount.split("").reverse();

    var output = "";
    for ( var i = 0; i <= amount.length-1; i++ ){
        output = amount[i] + output;
        if ((i+1) % 3 == 0 && (amount.length-1) !== i)output = ',' + output;
    }
    return output;
}

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Проблема заключается в добавлении запятых к числу. Просто преобразуйте число в строку с запятой перед тем, как поместить его в функцию .text ():

http://jsfiddle.net/TT8BH/11/

0 голосов
/ 20 августа 2011

Когда вы вызываете addCommas, вы возвращаете строку, приятно отформатированную для людей, но ужасную для таких вещей, как ++.Вам необходимо отслеживать и изменять переменную начала, и преобразовывать в строку только при необходимости:

var f=function(){
    jTarget.text(addCommas(start));
    if(start==end)
    {
        clearInterval(intervalId);
        if(callback)
        {
            callback();
        }
    }
    ++start;
}
...