2015-11-10 2 views
0

У меня есть форма с imput field «pcs», которая представляет собой количество штук и два типа доставки, одна бесплатная и одна выплачивается, и я стараюсь рассчитать цену на ходу , но скрипт иногда получает «NaN» или не пересчитывается, может ли кто-нибудь сказать мне, как это сделать правильно? Большое спасибо, это действительно оценено.jQuery рассчитать цену - иногда отображается «NaN»

jQuery("input").click(function (event) { 

    var shipping = 0; 

    var pcs = parseInt(jQuery('#kus').val()); 

    var kalkulace = function(shipping, pcs) { 
     var price = 290; 
     all = shipping + (price * pcs); 
     jQuery("#price-total").val(all); 
     return all; 
    } 

    var all = kalkulace(shipping, pcs); 

    jQuery("input:checked").each(function() { 
     if(!jQuery('#kus').val()) { 
      var pcs = 0; 
     } 
     else { 
      var pcs = parseInt(jQuery('#kus').val()); 
     } 
     if (jQuery(this).attr("id") == "shipping1") { 
      var shipping = 0; 
      var all = kalkulace(shipping, pcs); 
     } 

     if (jQuery(this).attr("id") == "shipping2") { 
      var shipping = 49; 
      var all = kalkulace(shipping, pcs); 
     } 

    }); 

    jQuery('#price').text(all + ' Kč'); 

}); 
+0

Похоже, вы могли бы написать несколько тестов, которые охватывали бы различные случаи ввода, чтобы вы могли определить, где ошибка может приходить от –

+0

Я хотел бы проверить для любых значений, которые могут быть переводящих в строки, такие как «свободные» или «платные» или слова такого характера. NaN просто означает «не число», поэтому у вас, вероятно, есть другое значение, которое бросается в микс. Возможно, выполните некоторые тесты с использованием метода .type() jQuery. –

ответ

0

Помимо проверки if(!jQuery('#kus').val()) {, вам также необходимо проверить, если значение может быть преобразовано в число. Вы можете использовать выражение $.isNumeric.

var pcs; 
if(!jQuery('#kus').val() || !$.isNumeric(parseInt($("#kus").val()))) 
    pcs = 0; 

Пример: http://jsfiddle.net/j6um1sq2/9/

+0

Большое спасибо, это уже разрешено типом ввода, оно может быть либо не установленным, либо цифровым (1-100). –