基于IF语句添加变量无效

Adding a Variable based on IF Statement Not Working?

本文关键字:变量 无效 添加 语句 IF 基于      更新时间:2023-09-26

我有几个变量,然后根据用户输入添加。只有一个例外。用户可以选择用现金或信用卡支付。如果他们选择信用卡选项,将增加.50美元的附加费。问题是我无法将附加费加到总额中。

这是我的代码(我已经删除了其他选项,留下了一个来减少代码。):

$(function() {
    var surcharge = parseFloat("0"),
                dsT = parseFloat("0");
    $('input[type=radio][name=CAT_Custom_1657686]').on('ifChecked', function(event){
        if (this.value == 'I will pay with cash at purchase pickup') {
             var surcharge = parseFloat("0");
             amountTotal();
        } else {
             var surcharge = parseFloat(".50");
             amountTotal();
        }
    });

    $("#CAT_Custom_1657649").change(function (){
        var ds = parseFloat("6.00");
           dsQ = $(this).val(),
           dsT = ds * parseFloat(dsQ);
           amountTotal();
    });

    function amountTotal() {
        var myTotal = surcharge + dsT;
        $("#Amount").val(myTotal);
        console.log(myTotal);
    } 

    $('input').iCheck({
        checkboxClass: 'icheckbox_square',
        radioClass: 'iradio_square',
        aria: true
    });
});

下面是显示问题的工作代码的fiddle链接。

正如你将看到的,我正在使用iCheck来设置无线电输入的样式。我不认为是它造成了问题。

我该如何解决此问题?

您正在再次定义作用域中的变量。

在为变量赋值时,去掉那些var关键字。

这个

var surcharge = parseFloat("0");

应该被这个取代

surcharge = parseFloat("0");

另一个也是如此。

使用var将创建变量的新实例,因此不会更改全局变量的值。var surcharge将为附加费创建新的local scope

这个:

if (this.value == 'I will pay with cash at purchase pickup') {
                     surcharge = parseFloat("0");
                     amountTotal();
                } else {
                     surcharge = parseFloat(".50");
                     amountTotal();
                }

Fiddle here

问题在于变量dsTsurcharge的范围。

一个好的解决方案是在类似的addTotal方法中找到它们的值

$(function() {
  var surcharge = parseFloat("0"),
    dsT = parseFloat("0");
  $('input[type=radio][name=CAT_Custom_1657686]').on('ifChecked', amountTotal);
  $("#CAT_Custom_1657649").change(amountTotal);
  function amountTotal() {
    var ds = 6,
      dsQ = $("#CAT_Custom_1657649").val(),
      dsT = ds * parseFloat(dsQ),
      surcharge = $('input[type=radio][name=CAT_Custom_1657686]:checked').data('surchange');
    var myTotal = surcharge + dsT;
    $("#Amount").val(myTotal);
  }
  //iCHECK PLUGIN
  $('input').iCheck({
    checkboxClass: 'icheckbox_square',
    radioClass: 'iradio_square',
    aria: true
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://icheck.fronteed.com/icheck.js"></script>
<link href="http://icheck.fronteed.com/skins/all.css" rel="stylesheet" />
<label for="CAT_Custom_1657649">Daily Special</label>
<select name="CAT_Custom_1657649" id="CAT_Custom_1657649" class="cat_dropdown">
  <option value="0" selected>0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
<br>
<br>
<label>Payment</label>
<br>
<input name="CAT_Custom_1657686" id="CAT_Custom_1657686_0" value="I will pay with cash at purchase pickup" type="radio" data-surchange="0">&nbsp; I will pay with cash at purchase pickup
<br>
<input name="CAT_Custom_1657686" id="CAT_Custom_1657686_1" value="I will pay with credit/debit card immediately" type="radio" data-surchange="0.5">&nbsp; I will pay with credit/debit card immediately
<br>
<br>Amount:
<input type="text" name="Amount" id="Amount" class="purchase-amount" readonly />