我正在尝试添加以逗号分隔的值。
试过 -
$(function(){
$('#sum').keyup(function(){
var prevalue=$('#sum').val().split(",");
for (i=0;i<prevalue.length;i++){
prevalue+=prevalue[i];
$('h1').html(prevalue);
}
});
});
此数组无限循环,不会循环值。
如何添加以逗号分隔的值?
答案 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);
})
});
这 - &gt; prevalue+=prevalue[i];
会冻结您的浏览器。
finalvalue
,以获取循环中prevalue
的总和或值。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);
}
});
});