Javascript,试图获得平均转化率

时间:2011-11-10 11:53:20

标签: javascript jquery

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

我的代码是

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') );
});

2 个答案:

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

答案 1 :(得分: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