1

我正在尝试添加以逗号分隔的值。

试过-

$(function(){
    $('#sum').keyup(function(){
    var prevalue=$('#sum').val().split(",");
        for (i=0;i<prevalue.length;i++){
            prevalue+=prevalue[i];
             $('h1').html(prevalue);
}

    });

});

该数组变为无限且不循环值。

如何添加以逗号分隔的值?

小提琴

4

7 回答 7

5

您正在修改循环内的变量prevalue(由循环条件共享),您每次都检查长度作为循环条件。每次它在循环中添加一些东西,所以它会继续运行。它曾经是一个array并且在将字符串添加到它之后,它会强制转换为stringfrom array,然后在病房中检查字符串的长度,然后您继续附加到它,它会一直持续下去。

尝试:

$(function(){
    $('#sum').keyup(function(){
    var prevalue=$('#sum').val().split(","), sum = 0;
        for (var i=0;i<prevalue.length;i++){
            sum += parseInt(prevalue[i], 10) || 0; //<--- Use a parseInt to cast it or use parseFloat

         }
     $('h1').html(sum); //<-- move it to out of the loop
    });
 });

小提琴

你的代码:

$(function () {
    $('#sum').keyup(function () {
        var prevalue = $('#sum').val().split(","); //<-- Iteration 1 prevalue is an array
        for (i = 0; i < prevalue.length; i++) { //iteration1 : it looks for array.length
            prevalue += prevalue[i]; //Changes the variable shared by the loop to string from array and string also has its length. And next time onwards it adds to itself a char from the string and length increases and loop goes infinitely.
            $('h1').html(prevalue); //<-- Doesn't make any sense here.
        }
    });
});
于 2013-09-28T18:39:13.377 回答
2

你有两个问题:

1.您迭代您更改的值,并且每次迭代都使值更长,因此它length正在增加并使您的循环无限

2.当您在变量上使用+=运算符时,它被翻译为字符串连接。要将其翻译为 int 增量,请使用.stringsumparseInt()

$(function(){
    $('#sum').keyup(function(){
    var prevalue=$('#sum').val().split(",");
        sum = 0;
        for (i=0;i<prevalue.length;i++){
            sum+=parseInt(prevalue[i]);
}
        $('h1').html(sum);
    });
});
于 2013-09-28T18:39:19.750 回答
2

试试这个:

$(function () {
    $('#sum').keyup(function () {
        var finalvalue = 0;
        var prevalue = $('#sum').val().split(",");
        for (i = 0; i < prevalue.length; i++) {
            finalvalue += parseInt(prevalue[i]);
        }
        $('h1').html(finalvalue);
    })
});

演示在这里

这 -> prevalue+=prevalue[i];冻结您的浏览器。

  • 我添加了一个新变量来获取循环内finalvalue的总和或值。prevalue
  • 由 split 生成的数组具有字符串。所以我曾经parseInt()得到你可以添加的数字,否则+=将作为字符串连接工作。
  • $('h1').html(finalvalue);从循环内部删除了它,不需要在每个循环上渲染它。所以我把它放在循环之后。
于 2013-09-28T18:39:23.603 回答
1

prevalue当您仍在对其进行操作时,您正在覆盖它。请改用另一个变量。

$(function(){
    $('#sum').keyup(function(){
    var prevalue=$('#sum').val().split(","), value = 0;
        for (i=0;i<prevalue.length;i++){
            value+=parseInt(prevalue[i], 10);
             $('h1').html(value);
        }  

    });

});
于 2013-09-28T18:40:41.847 回答
1

有一个更好的方法来处理您正在做的事情,作为您遇到的主要问题的补充,即修改应该包含该数组的同一个数组。

$(document).ready(function() {
    $('#sum').keyup(function() {
        var sum = 0;
        $('#sum').val().split(',').map(function(n) {
            if(!n) return;
            sum += parseInt(n);
            return sum;
        });
        $('#result').text(sum);
    });
});

在此处查看演示

于 2013-09-28T18:58:09.703 回答
0

这不起作用,因为您对值和总和使用相同的变量。尝试这样的事情:

$(function(){
    $('#sum').keyup(function() {
        var values = $('#sum').val().split(",");
        var sum = 0;
        for (i = 0; i < values.length; i++) {
            // At this point values[i] is still a string, so you need to parse it to float or int
            sum += parseFloat(values[i]);
        }

        $('h1').html(sum);
    });
});
于 2013-09-28T18:42:13.810 回答
-1

试试这个吧…………

$(function(){
    $('#sum').keyup(function(){
    var prevalue=$('#sum').val().split(",");
    var value = '';
        for (i=0;i<prevalue.length;i++){
            value+=prevalue[i];
             $('h1').html(value);
        }  

    });

});
于 2013-09-28T18:42:32.793 回答