2016-11-20 2 views
0

Ich versuche, einige jQuery-Funktionen zu verwenden, um die Werte von zwei number_field's in Schienen zu multiplizieren.jQuery multipliziert keine Zahlen richtig

Mein jQuery-Code, ist dies:

$('#mycometer_coc_sample_bv1').change(function() { 
    $('#cv').empty(); 
    var BV1 = $('#mycometer_coc_sample_bv1').val(); 
    var BV2 = $('#mycometer_coc_sample_bv2').val(); 
    $('#mycometer_coc_sample_cv').val((BV2 - BV1)*0.84 + BV2); 
    $('#cv').append($('#mycometer_coc_sample_cv').val()); 
}); 

$('#mycometer_coc_sample_bv2').change(function() { 
    $('#cv').empty(); 
    var BV1 = $('#mycometer_coc_sample_bv1').val(); 
    var BV2 = $('#mycometer_coc_sample_bv2').val(); 
    $('#mycometer_coc_sample_cv').val((BV2 - BV1)*0.84 + BV2); 
    $('#cv').append($('#mycometer_coc_sample_cv').val()); 
}); 

#mycometer_coc_sample_cv eine versteckte number_field ist verwendet, um meinen Controller den Wert zurück zu senden. Ich zeige diesen Wert in ein div von #cv

Die erste Funktion funktioniert ordnungsgemäß. Die Beispielzahlen, die ich verwendet habe, sind BV1 = 2, BV2 = 12. Bei Eingabe von 2 in BV1 erhalte ich die richtige Ausgabe in CV von -1,68. Aber wenn ich den zweiten Wert 12 in BV2 eingib, bekomme ich 8,412, wenn die richtige Ausgabe sollte sein 20.4

Ich habe keine Ahnung, was schief geht. Kann jemand helfen, dies zu debuggen?

Einige Screenshots: Eingabe erster Wert = korrekte Ausgabe enter image description here

Zweiter Wert etwas schief geht und falsche Ausgabe. Lebenslauf sollte 20,4

(12-2) gleich = 10 => 10 * 0,84 = 8,4 => 8,4 + 12 = 20,4 enter image description here

+2

jQuery macht keine Multiplikation. Das ist JavaScript. Und verstehen Sie, dass der Rückgabewert von '.val()' immer eine ** Zeichenkette ** ist, also müssen Sie explizit eine Zahl erzwingen. – Pointy

+0

Und es ist im Browser getan ... die nichts darüber weiß, welche Serversprache oder Framework Sie verwenden. Rails ist irrelevant – charlietfl

+1

Ich wusste nicht '.val()' zurückgegebene Zeichenfolge. Nach dem Umschließen meiner Variablen in 'Number()', die mir die richtige Ausgabe gab –

Antwort

2

Becase input ‚s val() Methode einen String zurückgibt, müssen Sie parseInt() anrufen auf die Werte wie:

var BV1 = parseInt($('#mycometer_coc_sample_bv1').val(), 10); 

Andernfalls werden diese Werte nicht hinzugefügt. Sie werden als Strings verkettet. Also:

'12' + '2' === '122' 
+0

Danke für die Antwort. In meinem Kommentar oben erwähnte ich, dass das Umbrechen meiner Variablen "BV1" und "BV2" in "Nummer (BV1)" mir die korrekte Ausgabe lieferte. –

+1

Ja, 'Number()' könnte auch eine Lösung sein. –

+0

Wofür ist der Downvote? –

Verwandte Themen