2013-04-28 4 views
5

Я пытаюсь понять, где моя ошибка, потому что это невозможно, что JS терпит неудачу в математике!Сравнение номера Javascript не удается

В HTML-форме у меня есть выбор и 9 ввод текста. Затем, на JS, я сравниваю введенный текст.

Моя проблема заключается в следующем: Если я пишу на

new_da3 = 1400 
new_a3 = 1900 

, ИС будет говорить OK3.

Если я пишу на

new_da3 = 1900 
new_a3 = 1400 

, ИС будет сказать NO3!

Но если я пишу на

new_da3 = 1500 
new_a3 = 800 

, ИС Willl СКАЗАТЬ OK3!

Почему? Не 1500 больше 800?

Спасибо!

HTML:

<form> 
<select id="new_nrp" onchange="selNrP(this.value);" style="background-color:#F00; color:#FFF"> 
      <option value="" selected="selected"></option> 
      <option value="1">1</option> 
      <option value="2">2</option> 
      <option value="3">3</option> 
     </select> 

    <?php 
    for($i=1; $i<=3; $i++){ 
     print '<input type="text" size="5" maxlength="5" id="new_da'.$i.'"> 
       <input type="text" size="5" maxlength="5" id="new_a'.$i.'">'; 

    } 
    ?> 

    <input type="submit" class="buttongreen" onClick="test()" value="Try the test function!"> 
</form> 

JS

function test(){ 
    var new_da1 = document.getElementById('new_da1').value 
var new_a1 = document.getElementById('new_a1').value 
var new_da2 = document.getElementById('new_da2').value 
var new_a2 = document.getElementById('new_a2').value 
var new_da3 = document.getElementById('new_da3').value 
var new_a3 = document.getElementById('new_a3').value 

var new_nrp = document.getElementById('new_nrp').value 

switch(new_nrp){ 
    case '3': 
     if(new_a2 < new_da3 && new_da3 <= new_a3){ 
      alert('ok3') 
     } else { 
      alert('no3') 
      return 
     } 
    case '2': 
     if(new_a1 < new_da2 && new_da2 <= new_a2){ 
      alert('ok2') 
     } else { 
      alert('no2') 
      return 
     } 
    case '1': 
     if(new_da1 <= new_a1){ 
      alert('ok1') 
     } else { 
      alert('no1') 
      return 
     } 
    break; 
    default: 
     alert("Why are you here?"); 
     return; 
} 

} 

ответ

7

Потому что вы сравниваете строки, а не целые числа. Используйте parseInt, чтобы явно использовать ваши значения как целые числа.

Вот в основном то, что вы делаете: jsFiddle example

Чтобы выполнить преобразование, изменить переменные на что-то вроде:

var new_da1 = parseInt(document.getElementById('new_da1').value, 10); 

(при условии, что они все целые числа)

+0

Да, они есть. Спасибо! – user2120569

4

Вам придется разобрать значение перед сравнением

пользователя ParseInt преобразовать в целое числовых значений, или parseFloat преобразовать плавать значение

parseInt Help parseFloat Help

+0

Какие «лучше» между ними? – user2120569

+0

не лучше, у них разные цели. –

Смежные вопросы