jQuery:添加以逗号分隔的值

时间:2013-09-28 18:30:24

标签: jquery

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

试过 -

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

    });

});

此数组无限循环,不会循环值。

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

Fiddle

7 个答案:

答案 0 :(得分:5)

您正在修改循环内部的变量prevalue(由循环条件共享),每次检查长度作为循环条件。每次它在循环内部添加一些东西,所以它继续。它曾经是array,在向其添加字符串后,它从string转向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
    });
 });

<强> Fiddle

您的代码:

$(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.
        }
    });
});

答案 1 :(得分:2)

您有两个问题:

1.你对你改变的价值进行了判断,并且每次交互都会使价值变得更长,因此length正在增加并使你的循环变得无限

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

$(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);
    });
});

答案 2 :(得分: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);
    })
});

演示here

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

  • 我添加了一个新变量finalvalue,以获取循环中prevalue的总和或值。
  • 您的数组由split生成,具有字符串。所以我使用parseInt()来获取您可以添加的数字,否则+=将用作字符串连接。
  • 我从循环内部删除了$('h1').html(finalvalue);,不需要在每个循环上渲染它。所以我把它放在循环之后。

答案 3 :(得分: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);
        }  

    });

});

答案 4 :(得分: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);
    });
});

请在此处查看demo

答案 5 :(得分: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);
    });
});

答案 6 :(得分:-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);
        }  

    });

});