2011-11-10 31 views
0

我有一个脚本,根据输入框设置转换率(正常工作),但我现在想要得到这些利率的平均值。Javascript,试图获得平均转换

我的代码是

var avg1 = $('#conversion1').text(); 
var avg2 = $('#conversion2').text(); 
var avg3 = $('#conversion3').text(); 
var avg4 = $('#conversion4').text(); 
var avg5 = $('#conversion5').text(); 
var avg6 = $('#conversion6').text(); 
var sumavg = (avg1 + avg2 + avg3 + avg4 + avg5 + avg6)/6; 
sumavg = Math.round(sumavg*Math.pow(10,2))/Math.pow(10,2); 
$('#conversion7').html(sumavg); 

的ID conversion1,2等具有0-100号(转化率)。然而每当我运行这个脚本时,我都会得到各种疯狂的数字(sumavg或id conversion7)。我不知道为什么!我还应该注意到,这一点代码是在每天进行转换的函数内部正常工作的。

请参阅以下整个片段:

// Conversion Rate 

$.fn.sumConv = function(customers) { 
var sum = 0; 
var val = 0 
this.each(function() { 
    if ($(this).is(':input')) { 
     val = $(this).val(); 
    } else { 
     val = $(this).text(); 
    } 
    customersval = $(customers).val(); 
    sum = (customersval/val) * 100; 

    //sum += parseFloat(('0' + val).replace(/[^0-9-\.]/g, ''), 10); 
    sum = Math.round(sum*Math.pow(10,2))/Math.pow(10,2); 
    if(sum=="Infinity" || sum=="NaN") sum=0; 

}); 
    // do average 
var avg1 = $('#conversion1').text(); 
var avg2 = $('#conversion2').text(); 
var avg3 = $('#conversion3').text(); 
var avg4 = $('#conversion4').text(); 
var avg5 = $('#conversion5').text(); 
var avg6 = $('#conversion6').text(); 
var sumavg = (avg1 + avg2 + avg3 + avg4 + avg5 + avg6)/6; 
sumavg = Math.round(sumavg*Math.pow(10,2))/Math.pow(10,2); 
$('#conversion7').html(sumavg); 
return sum; 
    }; 

$('input#foot1').bind('keyup', function() { 
    $('#conversion1').html($('input#foot1').sumConv('input#customers1')); 
}); 
$('input#customers1').bind('keyup', function() { 
    $('#conversion1').html($('input#foot1').sumConv('input#customers1')); 
}); 
$('input#foot2').bind('keyup', function() { 
    $('#conversion2').html($('input#foot2').sumConv('input#customers2')); 
}); 
$('input#customers2').bind('keyup', function() { 
    $('#conversion2').html($('input#foot2').sumConv('input#customers2')); 
}); 
$('input#foot3').bind('keyup', function() { 
    $('#conversion3').html($('input#foot3').sumConv('input#customers3')); 
}); 
$('input#customers3').bind('keyup', function() { 
    $('#conversion3').html($('input#foot3').sumConv('input#customers3')); 
}); 
$('input#foot4').bind('keyup', function() { 
    $('#conversion4').html($('input#foot4').sumConv('input#customers4')); 
}); 
$('input#customers4').bind('keyup', function() { 
    $('#conversion4').html($('input#foot4').sumConv('input#customers4')); 
}); 
$('input#foot5').bind('keyup', function() { 
    $('#conversion5').html($('input#foot5').sumConv('input#customers5')); 
}); 
$('input#customers5').bind('keyup', function() { 
    $('#conversion5').html($('input#foot5').sumConv('input#customers5')); 
}); 
$('input#foot6').bind('keyup', function() { 
    $('#conversion6').html($('input#foot6').sumConv('input#customers6')); 
}); 
$('input#customers6').bind('keyup', function() { 
    $('#conversion6').html($('input#foot6').sumConv('input#customers6')); 
}); 

回答

0

我想你必须申请parseFloat您的数据。 text方法返回字符串,不是数字。在简单的例子看看:

var avg1 = "1"; 
var avg2 = "1"; 
var avg3 = "1"; 
var avg4 = "1"; 
var avg5 = "1"; 
var avg6 = "1"; 
var sumavg = (avg1 + avg2 + avg3 + avg4 + avg5 + avg6)/6; 

sumavg将18518.5而不是1

包装所有avg数据与parseFloat

var avgN = parseFloat($('#conversionN').text()); 
+0

作品Great.Thank你。 –

0

你重复了很多代码,所以我建议采用DRY技术来尽量减少 - 例如使bindKeyUp函数...

无论如何,你需要数字。 .text()返回字符串。例如。 "99" + "77" === "9977"。这是你的疯狂数字可能来自哪里。试试这个:

var avg1 = ~~$('#conversion1').text(); 
var avg2 = ~~$('#conversion2').text(); 
// repeat 

~~其操作数只转换为数字(和地板也向0)。 More info

或者,使其更清晰,使用parseFloat

var avg1 = parseFloat($('#conversion1').text()); 
var avg2 = parseFloat($('#conversion2').text()); 
// repeat 
+0

很好,谢谢。 –