2012-06-01 124 views
2

問題:校驗值

我有部分工作,由於某種原因它被套牢值100的所有其他值沒有問題工作的功能。該函數將輸入字段的值與JSON數組中的對應值進行比較。

場景:

就拿你做出選擇3,然後1,那麼1,你將最終獲得值12.如果您在輸入字段中輸入100,然後繼續將錯誤顯示如addClass()所示。 100不小於12,不應該允許addClass()添加錯誤。這裏的錯誤在哪裏?根據以下

<div id="ref" class="control-group"> 
    <label class="control-label">Number of references:</label> 

    <div class="controls"> 
     <div class="input-prepend"> 
      <input class="input-small" id="references" name="references" type="text"> 
     </div> 
    </div> 
</div> 

由PHP產生的陣列,並通過json_encode轉化爲JavaScript()::

的HTML代碼

var numbers = <?php echo json_encode($numbers); ?>; 

陣列:

{ 
    "1":{ 
     "1":{ 
      "1":"36", 
      "2":"63" 
     }, 
     "2":{ 
      "1":"54", 
      "2":"63" 
     } 
    }, 
    "2":{ 
     "1":{ 
      "1":"60", 
      "2":"105" 
     }, 
     "2":{ 
      "1":"90", 
      "2":"105" 
     } 
    }, 
    "3":{ 
     "1":{ 
      "1":"12", 
      "2":"21" 
     }, 
     "2":{ 
      "1":"18", 
      "2":"24" 
     } 
    } 
} 

jQuery代碼:

<script type="text/javascript"> 
    $(document).ready(function() 
    {   
     $('#references').change(function() 
     { 
      var choice1 = $('input[name=level]:checked').val(); 

      if (choice1 == '1') 
      { 
       var choice2 = $('input[name=authors]:checked').val(); 
      } 
      else 
      { 
       var choice2 = $('input[name=credits]:checked').val(); 
      } 

      var number = numbers[3][choice1][choice2]; 

      if ($(this).val() < number) 
      { 
       $('#ref').addClass('error'); 
      } 
      else 
      { 
       $('#ref').removeClass('error'); 
      } 
     }); 
    }); 
</script> 

回答

5

你是做一個字符串比較有。字符串比較"100" < "12" = true。試着做了一些比較像下面,

if (parseInt($(this).val(), 10) < parseInt(number, 10)) 
+0

+1爲是第一:) –

+0

所以我笨的,沒想到的數據類型。謝謝你指出。下次必須更加小心! – kexxcream

+0

+1只是指向 – thecodeparadox

1

眼下,所有的數字都是字符串...這樣的JavaScript引擎不處理你的數字是真實的數字。

嘗試包裝parseInt函數()周圍的任何東西,你希望是一個數字:

<script type="text/javascript"> 
    $(document).ready(function() 
    {   
     $('#references').change(function() 
     { 
      var choice1 = $('input[name=level]:checked').val(); 

      if (choice1 == '1') 
      { 
       var choice2 = $('input[name=authors]:checked').val(); 
      } 
      else 
      { 
       var choice2 = $('input[name=credits]:checked').val(); 
      } 

      var number = parseInt(numbers[3][choice1][choice2], 10); 

      if (parseInt($(this).val(), 10) < number) 
      { 
       $('#ref').addClass('error'); 
      } 
      else 
      { 
       $('#ref').removeClass('error'); 
      } 
     }); 
    }); 
</script> 
+0

doh ...另一個答案張貼...我的壞 –