2009-08-12 12 views
0

JavaScriptの数値の比較が「より大きい」が機能しないのはなぜですか?以下の例は、ミニナンバーがマキシより小さい場合でもtrueを返します。JavaScriptが最大数を超える最小値を比較しない

ミニとマキシはフォーム入力値です。この例では、jQueryを使用して値を取得していますが、簡単に削除できます。

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

"Math.max(ミニ、マキシ)==ミニ" と "ミニ>マキシは、" 正常に動作し交換します。だから、次は作業を行います。最初の例では

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はminiとmaxiを文字列として扱い、それらを字句的に比較している可能性があります。この場合、「500」は「1500」より大きい。 miniとmaxiを比較する前に、miniとmaxiを整数に変換してみましょう。 – Karl

答えて

4

使用この行は、文字列

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

をからのIntを取得します。あなたはIntにそれらを解析して比較しなければなりません。 また、数値が10進数として解析されるようにするには、2番目のパラメータとして10を入れる方が良いです。

+0

mini.valueOf()が必要かどうかと思います。代わりに、parseInt(mini、10)を使用していますか? – Andres

+0

私はあなたが正しいと思います –

+0

mini.replace( "、"、 "");コンマを削除するか、値の変換は一切行われません。 –

0

あなたは文字列を比較して"1500" < "500"されています。 2番目の例では、Math.maxは数値を数値に変換します。あなたは、文字列のようなDOMから比較する値を取得sinve

+0

明示的に整数に変換するには、次のようにします:parseInt() – Karl

関連する問題