2011-11-10 6 views
0

入力ボックスに応じてコンバージョン率を設定しているスクリプトがあります(うまくいきますが)。Javascript、変換平均を取得しようとしています

マイコードconversion1,2等ID

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

ある0-100の数(コンバージョン率)を有します。しかし、私はこのスクリプトを実行するたびに、平均(sumavgまたはidの変換7)のすべての種類の狂った数字を取得します。何故かはわからない!また、このコードは、毎日の変換を行う関数の内部にあることに注意してください。

は全体のスニペットは、以下を参照してください:

// 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; 

sumavgparseFloatと18518.5なく1

ラップ全てavgのデータになります。

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

作品Great.Thankます。 –

0

あなたは多くのコードを繰り返しています、だから私はそれを最小限に抑えるためにDRY技術を採用することを勧めます。 bindKeyUpを機能させる...

とにかく番号が必要です。 .text()は文字列を返します。例えば。 "99" + "77" === "9977"。これは、あなたの狂った数字がどこから来ているのかです。ちょうど数(0への床にそれを)へのオペランドを変換し

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

~~:これを試してみてください。 More info

それとも、それは明確に、parseFloatを使用するようにする:

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

素晴らしい作品です。ありがとうございます。 –

関連する問題