0

我是 js/jQuery 的新手。原谅这个可怕的剧本。我迷路了。

*(按照建议使用全局变量 ifTaxRate 更新。)*

我正在尝试根据客户选择的状态和订购数量计算税金、小计和总计,并在屏幕上动态显示。

如果客户来自爱达荷州,我将尝试应用 6% 的销售税率。

选择选项:

 <select id="state" value="<?php echo $_SESSION['sstate'] ?>" name="state" class="required" >
   <option value="">Select State</option>
   <option value="AK">Alaska</option>
   .
   <option value="ID">Idaho</option>
   .
   .
   <option value="WY">Wyoming</option>
</select>

<select id="orderquantity" name="orderquantity">
   <option value="1">1 Bottle (30 Day Supply)</option>
   .
   .
   <option value="8">8 Bottles (240 Day Supply)</option>
</select>

显示信息的 div:

<div class="quantityselected"></div>
<div class="productprice"></div>
<div class="pricequantity"></div>
<div class="subtotal"></div>
<div class="tax"></div>
<div class="shipping"></div>
<div class="total"></div>

真正糟糕的 js 尝试:

<script type="text/javascript">
      var ifTaxRate;
      $(document).ready(function() {
          $("#state").change(function() {
            if ($(this).val() == 'ID') {
              ifTaxRate = .06;
            } else {
              ifTaxRate = 0;
            }
          });
        });

      function doMath() {
            var quant = parseInt(document.getElementById('orderquantity').value);
            //change price here
            var price = 69.99;
            var tax = ifTaxRate;
            //change flat shipping cost here
            var shipping = 4.99;
            var subtotal = quant * price;
            var taxtotal = tax * subtotal;
            var total = subtotal + tax;

            $('.quantityselected').value = quant;
            $('.productprice').value = price;
            $('.pricequantity').value = subtotal;
            $('.tax').value = taxtotal;
            $('.shipping').value = shipping;
            $('.total').value = shipping;
        }
</script>
4

3 回答 3

1

我在这里看到的一个大问题是您的iftax变量是在您作为参数传递的匿名函数的范围内声明的,$('state').change();
您必须将其声明为全局变量,而不是在所述函数中重新声明它:

var ifTaxRate = 0; //new    
$(document).ready(function() {
   $("#state").change(function() {
      if ($(this).val() == 'ID') {
         ifTaxRate = .06;
      } else {
         ifTaxRate = 0;
      }
      doMath();//new
   });
   //this way every time you change a select box value, doMath() is called
   $('select').change(doMath);
});

这样,它就可以在您需要的任何地方访问...

更新

至于没有在 div 中显示的内容,请不要使用

$('.quantityselected').value = quant;

它不起作用有两个不同的原因:首先:(.value = ....val(...)jQuery 中)是本机 javascript,在 jQuery 对象中不起作用
第二:值是输入和选择控件的属性,您必须设置 div .innerText.text()在 jQuery 中)和.innerHTML.html()在 jQuery 中)

采用:

$('.quantityselected').html(quant);
... 
于 2012-04-05T17:19:50.270 回答
0

您的问题很可能是范围之一。

由于您在状态更改函数的闭包内声明变量,因此从您的方法iftax中看不到它。doMath

在内部,您应该在顶层声明变量,然后仅从 state-change 函数分配给它:

<script type="text/javascript">
  var iftax;

  $(document).ready(function() {
      $("#state").change(function() {
        if ($(this).val() == 'ID') {
          iftax = .06;
        } else {
          iftax = 0;
        }
      });
    });

    // rest as before

(在一个完全不同的主题上,调用变量ifTaxRate或类似变量会更清楚,因为目前我认为它可能与应缴税额混淆,尤其是在与和相同的上下文中使用时。)priceshipping

于 2012-04-05T17:16:58.310 回答
0

在文档就绪函数中声明的变量“iftax”是该函数的本地变量。doMath 函数中提到的 iftax 将查看全局范围(window.iftax),我猜这是未定义的。

尽管使用全局变量有点反模式,但如果您从文档就绪函数中的所有位置(当前写为“var iftax”)中删除“var”,它将默认为全局变量并且您的代码应该可以工作。

于 2012-04-05T17:17:37.890 回答