【问题标题】:Getting an alternative data value based on change selection根据更改选择获取替代数据值
【发布时间】:2017-03-22 00:01:06
【问题描述】:

我无法提出以下逻辑。我有两个复选框,每个复选框中有两个数据价格值。一个是solo-price,如果只选中一个复选框,我想使用它。然后我有一个combined-price,如果两个复选框都被选中,我想使用它......想想捆绑定价。

我有两个问题,都与组合定价有关。

-当两个复选框都被选中时,我无法弄清楚如何使用组合定价显示在 package1-review-pricepackage2-price-review div 中。基本上重写了以下变量。

var package1Price = [];
var package2Price = [];

-那么我的第二个问题与上述问题直接相关。当两个复选框都被选中时,总数为solo-pricecombination-price 的总和。它显示总额为 46 美元,而实际应该是 21 美元。

calcTotalPrice 函数中,我尝试像这样嵌套所有命令……但没有帮助。

if ($('#package2').not(':checked') && $('#package1').is(':checked')) {
        $('#package1:checked').each(function() {
          totalPrice += parseInt($(this).data('solo-price'));
        });
      }  

有人看出我的逻辑有什么问题吗?

Here is a fiddle.

    var package1Price = [];
    var package2Price = [];

    $('.product-check').on('change', function() {
      if ($('#package1').is(':checked') && $('#package2').is(':checked')) {
				$('#packages-selected').toggle(100).html('Both packages selected');
      }
      if ($('#package2').not(':checked') && $('#package1').is(':checked')) {
        //Package 1 single Price
        var str = $('#package1:checked').map(function() {
          return "$" + $(this).data('solo-price');
        }).toArray().join(" ");
        $('#product1-price-review').toggle().html(str);
        calcTotalPrice();
        //$('#packages-selected').toggle(100).html('Package 1 Selected');
      }
      else if ($('#package1').not(':checked')) {
      	$('#product1-price-review').toggle();
        package1Price = 0;
      }
      if ($('#package1').not(':checked') && $('#package2').is(':checked')) {
        var str = $('#package2:checked').map(function() {
          return "$" + $(this).data('solo-price');
        }).toArray().join(" ");
        $('#product2-price-review').html(str);
        $('#product1-price-review').hide();
        calcTotalPrice();
        // $('#packages-selected').toggle(100).html('Package 2 Selected');
      }
      else if ($('#package2').not(':checked')) {
      	$('#product2-price-review').hide();
         package2Price = 0;
      }
    });

    function calcTotalPrice() {
      var totalPrice = 0;
      var tpPrice = 0;
      $('#package1:checked').each(function() {
        totalPrice += parseInt($(this).data('solo-price'));
      });
      $('#package2:checked').each(function() {
        tpPrice += parseInt($(this).data('solo-price'));
      });
      if ($('#package1').is(':checked') && $('#package2').is(':checked')) {
        $('#package1:checked,#package2:checked').each(function() {
          tpPrice += parseInt($(this).data('combined-price'));
        });
      }
      $('#package-review-total').html("Total $ " + (totalPrice + tpPrice));
    }
#packages-selected, #product1-price-review, #product2-price-review {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" class="product-check" id="package1" value="Product 1" data-solo-price="10" data-combined-price="8">
<input type="checkbox" class="product-check" id="package2" value="Product 2" data-solo-price="15" data-combined-price="13">
<p id="product1-price-review"></p>
<p id="product2-price-review"></p>
<p id="package-review-total"></p>
<p id="packages-selected"></p>

【问题讨论】:

    标签: javascript jquery function checkbox input


    【解决方案1】:

    问题出在您的calcTotalPrice() 函数中。请注意,即使您同时选中了这两个复选框,您也添加了 solo-prices 的值,因此总计为 46 美元(10 + 15 + 8 + 13 = 46),而不是所需的 21 美元。

    试试应该能解决问题:

    function calcTotalPrice() {
      var totalPrice = 0;
      var tpPrice = 0;
    
      if ($('#package1').is(':checked') && $('#package2').is(':checked')) {
        $('#package1:checked,#package2:checked').each(function() {
          tpPrice += parseInt($(this).data('combined-price'));
        });
      } else {
        $('#package1:checked').each(function() {
          totalPrice += parseInt($(this).data('solo-price'));
        });
        $('#package2:checked').each(function() {
          tpPrice += parseInt($(this).data('solo-price'));
        });
      }
      $('#package-review-total').html("Total $ " + (totalPrice + tpPrice));
    }
    

    【讨论】:

    • 谢谢!你知道我怎样才能让 &lt;p id="product1-price-review"&gt;&lt;/p&gt; &lt;p id="product2-price-review"&gt;&lt;/p&gt; div 在各自的 div 中显示 combination-price 吗?我用这些变化更新了小提琴。 jsfiddle.net/du68ha3q/2
    • 我试着稍微简化一下代码。希望这会有所帮助:jsfiddle.net/rpapfqL6/1
    • 这是实现它的方法:jsfiddle.net/qe9ytvgs/2 如有其他问题,请在 StackOverflow 上将它们作为单独的问题提出,因为我们已经解决了这里的主要问题。手指交叉!
    • 很抱歉,我不确定您现在遇到了什么问题。请在 StackOverflow 上将其作为另一个问题询问,并将您的代码放在那里。
    猜你喜欢
    • 2017-09-20
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多