2014-09-15 3 views
1

Вот мой код:Double JQuery проверка 2 десятичных входов и получить большее количество

$(document).ready(function(){ 

    jQuery.validator.addMethod("cents", function(value, element) { 
     return this.optional(element) || /^\d{0,12}(\.\d{0,2})?$/i.test(value); 
    }, "You must include two decimal places"); 

    $.validator.addMethod('lessthan', function(value, element, param) { 
      return this.optional(element) || value <= $(param).val(); 
    }, 'Invalid value'); 
    $.validator.addMethod('greaterthan', function(value, element, param) { 
      return this.optional(element) || value >= $(param).val(); 
    }, 'Invalid value'); 

    $("#globalSettingsFormId").validate({ 
     rules: { 

     // Validation Rules 
      minBetAmt: { 
       required: true, 
       number: true, 
       cents: true, 
       lessthan: '#maxBetAmt' 

      }, 
      maxBetAmt: { 
       required: true, 
       number: true, 
       cents: true, 
       greaterthan: '#minBetAmt' 
      } 

     submitHandler: function(form){ 
       form.submit(); 
     }, 
    messages: { 
      minBetAmt:{ 
       required: "minimum bet amount required!", 
       number: "This must be a number!", 
       cents: "You must include two decimal places", 
       lessthan: 'Minimum Bet Amount must be less than Max Bet Amount!' 
      }, 
      maxBetAmt: { 
       required: "Max bet amount required!!", 
       number: "This must be a number!", 
       cents: "You must include two decimal places", 
       greaterthan: "Max Bet Amount must be greater than Min Bet Amount!" 
      } 
    }); 

Когда мои входы minBetAmt = 25,55 и maxBetAmt = 26,5, моя форма проверяет и подает. Но когда я изменяю свой maxBetAmt на 241.55 или 2400.25, это сообщение выходит: «Максимальная ставка ставки должна быть больше, чем минимальная сумма ставки!»

Кажется, что что-то не так с моими addMethods. Некоторые люди сказали мне, что что-то не так в возвращаемой стоимости моего метода «центами».

Помогите мне, ребята, выяснить, что случилось? Заранее спасибо!

+0

Комментарий подразумевает необходимы два знак после запятой, но ваше регулярное выражение говорит 0 до 2 знаков после запятой. Можете ли вы подтвердить, что это правильно? –

ответ

1

Вы сравниваете порядок сортировки строк, а не значения. например «25» больше, чем «24000», поскольку «5» больше, чем «4» во втором символе.

Преобразование значений в плавающую точку Число значений перед сравнением.

$.validator.addMethod('lessthan', function(value, element, param) { 
     return this.optional(element) || parseFloat(value) <= parseFloat($(param).val()); 
}, 'Invalid value'); 
$.validator.addMethod('greaterthan', function(value, element, param) { 
     return this.optional(element) || parseFloat(value) >= parseFloat($(param).val()); 
}, 'Invalid value'); 

Простой тест: http://jsfiddle.net/TrueBlueAussie/6g00am3c/1/

console.log("25" > "2400"); 
console.log(25.00 > 2400); 

(проверьте вывод консоли)

true 
false 
+0

Спасибо @TrueBlueAussie. Теперь он работает правильно. :) –

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