2011-01-24 20 views
0

入力フィールドのkeyUpイベントで単純な数値比較を行っています。何らかの理由で、私は期待された結果を得ていないので、理由を理解できません。 になります。ユーザーが入力した数値がhtml属性に格納されている数値より大きい場合は、背景が赤くなり、そうでない場合は白くなります。単に「9」と入力すると背景が赤くなります。 ??javacript条件付き予期しない結果を返す

var admin = $('input[name="diskStorage"]').attr('data-adminstorage'); // 2097152000 

$('#new-user input[name="diskStorage"]').keyup(function(){ 

    if(admin < $(this).val()) 
     $(this).css('background','red'); 
    else 
     $(this).css('background','white'); 
}); 

これらの値をデバッグすると、if(2097152000 < 549)がtrueを返します。ここではHTMLはどんな違いを行った場合には、です:

<form action="administrate.php" method="post" id="new-user"> 
<table><tbody><tr> 
... 
    </tr><tr> 
    <td>Disk Storage Limit:</td> 
    <td> 
    <input type="text" data-adminStorage="2097152000" name="diskStorage" value="" /> megaBytes<br /> 
    <span id="info"></span></td> 
... 
    </tr></tbody></table> 

ここでは、ライブです:http://jsfiddle.net/JMC_Creative/dqAJj/2/

答えて

2

.attr.val()リターンStringオブジェクト - 数値に変換する単項+演算子を使用します。

var admin = $('input[name="diskStorage"]').attr('data-adminstorage'); 
admin = +admin; 

if(admin < +$(this).val()) { 
    //... 
} 
+0

私の意見では、単項 '+'は 'parseInt(str、10)'よりも良い方法です。例: 'parseInt(str、10)'ではなく '+ str'です。 – Reid

+0

@Reidどのようにして「より良い」のですか? –

+0

それは本当ではありません。 '' 2097152000 '<' 549''は完全に有効で、結果は 'true'です。 –

0

が数字ではない文字列にするために、管理値を取得した後/1を追加してみてください。

var admin = $('input[name="diskStorage"]').attr('data-adminstorage')/1; 

編集:またthis.val上:

$(this).val()/1; 
+0

ようなハックを使用するには、 'のparseInt(strの、10)'そのために...必要(彼らはJavaScriptで悪い事を引き起こす可能性が非常に高い) – ThiefMaster

+0

はい、私は知っているがありませんエラーのシナリオでは、どちらも 'NaN'を返すでしょう – JCOC611

+0

' parseInt'は '/ 1'よりも明快ですので、私はそれを好むでしょう。 –

0

これらはおそらく両方の文字列です。最初の数字に変換する必要があります

var admin = Number($('input[name="diskStorage"]').attr('data-adminstorage')); // 2097152000 

$('#new-user input[name="diskStorage"]').keyup(function(){ 

    if(admin < Number($(this).val())) 
     $(this).css('background','red'); 
    else 
     $(this).css('background','white'); 
}); 
関連する問題