2011-01-24 3 views
0

Я делаю простое сравнение чисел в событии keyUp поля ввода. По какой-то причине я не получаю ожидаемого результата, и я не могу понять, почему. То, что должно было, состоит в том, что если введенное пользователем число больше, чем указано в атрибуте html, фон должен быть красным, иначе он останется белым. Простое включение «9» приведет к красному фону. ??javascript условное возвращение неожиданного результата

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) возвращается верно. Вот 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)' на мой взгляд. Пример: '+ str' вместо' parseInt (str, 10) '. – Reid

+0

@Reid Каким образом это «лучше»? –

+0

Это неправда. '' 2097152000 '<' 549'' является абсолютно верным и приводит к 'true'. –

0

Попробуйте добавить /1 после получения значения администратора, чтобы сделать это число не строка ,

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

Edit: также на this.val:

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

Там в 'ParseInt (улица, 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'); 
}); 
Смежные вопросы