2009-08-12 8 views
0

Warum funktioniert "größer als" Vergleiche für Zahlenwerte in JavaScript nicht. Das folgende Beispiel wird immer wahr, auch wenn die Mini-Nummer kleiner als der Maxi ist.JavaScript vergleicht nicht Minimum größer als maximale Anzahl Werte

Mini und Maxi sind Formulareingabewerte. In diesem Beispiel wird jQuery verwendet, um die Werte abzurufen, es kann jedoch problemlos entfernt werden.

var mini = $('form#filterPrice input.min').val(); //eg. 500 
var maxi = $('form#filterPrice input.max').val(); //eg. 1500 

if(mini.valueOf() > maxi.valueOf()) { //also used: mini > maxi 
    alert('test'); //alerts "test" even when mini is less than maxi 
$('form#filterPrice input.min').val(maxi); //should switch values if mini > maxi 
$('form#filterPrice input.max').val(mini); 
} 

austauschen "mini> maxi" mit "Math.max (Mini, Maxi) == mini" funktioniert gut. So funktioniert die folgenden Arbeiten:

var mini = $('form#filterPrice input.min').val(); //eg. 500 
var maxi = $('form#filterPrice input.max').val(); //eg. 1500 

if(Math.max(mini, maxi) == mini) { 
    alert('test'); 
$('form#filterPrice input.min').val(maxi); 
$('form#filterPrice input.max').val(mini); 
} 
+1

Javascript kann Mini und Maxi als Strings behandeln und nur lexikalisch vergleichen. In diesem Fall ist '500' größer als '1500'. Versuchen Sie, Mini und Maxi in Ganzzahlen zu konvertieren, bevor Sie sie vergleichen. – Karl

Antwort

4

Mit dieser Linie zu bekommen Int von String

if(parseInt(mini.valueOf(),10) < parseInt(maxi.valueOf(),10)) { //also used: mini > maxi 

sinve Sie Werte erhalten von dom wie eine Kette miteinander zu vergleichen. Fist sollten Sie sie in Int analysieren und erst dann vergleichen. Auch ist es besser, 10 als zweiten Parameter zu setzen, um sicherzustellen, dass die Zahl als Dezimalzahl analysiert wird.

+0

Ich frage mich, ob mini.valueOf() notwendig ist. Verwenden Sie stattdessen parseInt (mini, 10) schneller? – Andres

+0

ich denke, du hast Recht –

+0

erinnere mich an mini.replace (",", ""); Das Entfernen von Kommas oder keiner der Wertkonvertierungen funktioniert. –

0

in erstem Beispiel von Strings und "1500" < "500" vergleichen. Im zweiten Beispiel wandelt Math.max die Werte in Zahlen um.

+0

Sie können explizit in Ganzzahlen konvertieren mit: parseInt() – Karl

Verwandte Themen