jQuery вычитает сумму из суммы полей ввода при вводе кода скидки

Хорошо, я рву на себе волосы из-за этого. У меня есть форма, состоящая в основном из раскрывающихся списков и флажков - всем им назначены значения, поэтому, когда пользователь выбирает вещи, рассчитывается общая сумма всего.

Мое последнее поле ввода — это текстовый ввод под названием «Код скидки». Я хочу иметь возможность вводить установленный код и вычитать фиксированную сумму из суммы.

Ниже приведен скрипт, который я использую для определения правильности кода скидки:

$(".apply_discount").click(function() {
if ($("input[name='discount']").val() === "DISTR50") {
 $("span").text("Validated...").show();
 $("input[name='discount']").attr("value",500.99);
 return true;
}
$("span").text("Not a valid discount code").show().fadeOut(2000);
return false;
});

и вот код, который вычисляет сумму моих входов:

//iterate through each textboxes and add keyup
    //handler to trigger sum event
    $(".txt, .select, .checkbox").each(function() {
        $(this).change(function(){
            calculateSum();
        });
    });
});

function calculateSum() {
    var discount = $("input[name='discount']").attr('value');
    var sum = 0;
    //iterate through each textboxes and add the values
    $(".txt, .select, .checkbox:checked").each(function() {

        //add only if the value is number
        if(!isNaN(this.value) && this.value.length!=0) {
            sum += parseFloat(this.value);
        }

    });
    //.toFixed() method will roundoff the final sum to 2 decimal places
    var calc_total = sum;
    $("#sum").html(calc_total.toFixed(2));
}

как видите, сумма добавляется к div с именем #sum — я не могу понять, как вычесть значение входной скидки.

вы можете увидеть мой код в действии здесь: http://www.samskirrow.com/projects/distr/index3.html

Вот он в JSfiddle (хотя раздел расчета пробега не работает) http://jsfiddle.net/bZhK4/


person Sam Skirrow    schedule 10.09.2013    source источник


Ответы (1)


Надеюсь, я понимаю, что вы ищете: не могли бы вы изменить функцию суммы вычислений, где вы объявляете calc_total равным:

var calc_total = sum - parseFloat(discount);

А затем убедитесь, что вы обновили его в функции применения скидки.

$(".apply_discount").click(function() {
  if ($("input[name='discount']").val() === "DISTR50") {
  $("span").text("Validated...").show();
  $("input[name='discount']").attr("value",500.99);
  calculateSum();
  return true;
  }
  $("span").text("Not a valid discount code").show().fadeOut(2000);
  return false;
});
person sasonic    schedule 10.09.2013
comment
также вы можете использовать .val() для установки значения .val(500.99) - person reyaner; 10.09.2013