【问题标题】:Jquery Calculator keeps returning NaNJquery Calculator 不断返回 NaN
【发布时间】:2020-10-01 13:28:53
【问题描述】:

您好,我有一个 Jquery 计算器,但它一直返回 NaN

谁能帮忙

我确实阅读了一些关于类似问题的其他堆栈问题,并看到人们说要将 parseInt 放入 jquery,我已经尝试过但仍然得到 NaN

请注意,我也有条件逻辑(确实有效),但为了节省与我的问题无关的 100 行代码,我将其全部缩短。

用户只能选择其中一个下拉选项,不能同时选择两者。

/* * * * * * * * * * * * * * * * * *
 * Calculator
 * * * * * * * * * * * * * * * * * */
$(function() {
  $("select.cover_question10").on("change", calc);
  $("select.cover_question15").on("change", calc);

  function calc() {
    var basePrice = 0;
    newPrice = basePrice;

    $("select.cover_question10 option:selected, select.cover_question15").each(function() {
      newPrice += parseInt($(this).data('price'), 10);
    });

    var percentage = 0;
    $("input[type=checkbox].calculate:checked").each(function() {
      percentage += parseInt($(this).data('price'), 10);
    });
    newPrice = newPrice + (newPrice * percentage / 100);
    newPrice = newPrice.toFixed(2);
    $("#item-price").html(newPrice);
    $("#price").val(newPrice);
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>How long do you want the cover 10?</label>
<select class="select cover_question10" name="cover_question10" id="cover_question">
  <option id="cover" value="Select">Select cover</option>
  <option id="cover_12" value="cover_12" data-price="90.76" data-capacity="12 Months Cover">12 Months Cover </option>
  <option id="cover_24" value="cover_24" data-price="124.50" data-capacity="24 Months Cover">24 Months Cover</option>
  <option id="cover_36" value="cover_36" data-price="135" data-capacity="36 Months Cover">36 Months Cover</option>
</select>

<br><br>
<label>How long do you want the cover 15?</label>
<select class="select cover_question15" name="cover_question15" id="cover_question">
  <option id="cover" value="Select">Select cover</option>
  <option id="cover_12" value="cover_12" data-price="104.26" data-capacity="12 Months Cover">12 Months Cover </option>
  <option id="cover_24" value="cover_24" data-price="145.50" data-capacity="24 Months Cover">24 Months Cover</option>
  <option id="cover_36" value="cover_36" data-price="195" data-capacity="36 Months Cover">36 Months Cover</option>
</select>
<br><br> £

<span id="item-price">0.00</span>

这也是我的小提琴
https://jsfiddle.net/0ajo48ne/

【问题讨论】:

    标签: jquery calculator


    【解决方案1】:
    <label>How long do you want the cover 10?</label>
    <select
      class="select cover_question10"
      name="cover_question10"
      id="cover_question"
    >
      <option id="cover" value="Select" data-price="0">Select cover</option>
      <option
        id="cover_12"
        value="cover_12"
        data-price="90.76"
        data-capacity="12 Months Cover"
      >
        12 Months Cover
      </option>
      <option
        id="cover_24"
        value="cover_24"
        data-price="124.50"
        data-capacity="24 Months Cover"
      >
        24 Months Cover
      </option>
      <option
        id="cover_36"
        value="cover_36"
        data-price="135"
        data-capacity="36 Months Cover"
      >
        36 Months Cover
      </option>
    </select>
    
    <br /><br />
    <label>How long do you want the cover 15?</label>
    <select
      class="select cover_question15"
      name="cover_question15"
      id="cover_question"
    >
      <option id="cover" value="Select" data-price="0">Select cover</option>
      <option
        id="cover_12"
        value="cover_12"
        data-price="104.26"
        data-capacity="12 Months Cover"
      >
        12 Months Cover
      </option>
      <option
        id="cover_24"
        value="cover_24"
        data-price="145.50"
        data-capacity="24 Months Cover"
      >
        24 Months Cover
      </option>
      <option
        id="cover_36"
        value="cover_36"
        data-price="195"
        data-capacity="36 Months Cover"
      >
        36 Months Cover
      </option>
    </select>
    <br /><br />
    £
    
    <span id="item-price">0.00</span>
    
    
    
    $(function () {
      $("select.cover_question10").on("change", calc);
      $("select.cover_question15").on("change", calc);
    
      function calc() {
        var basePrice = 0;
        newPrice = basePrice;
    
        $("select.cover_question10, select.cover_question15")
          .find("option:selected")
          .each(function () {
            newPrice += parseInt($(this).data("price"), 10);
          });
    
        var percentage = 0;
        $("input[type=checkbox].calculate:checked").each(function () {
          percentage += parseInt($(this).data("price"), 10);
        });
        newPrice = newPrice + (newPrice * percentage) / 100;
        newPrice = newPrice.toFixed(2);
        $("#item-price").html(newPrice);
        $("#price").val(newPrice);
      }
    });
    

    【讨论】:

    • 默认选择的选项没有价格属性,所以它返回 NAN,我刚刚更新了 10,并更新了 jquery 选择器以选择子选项。
    • 可以轻松设置为默认值0。
    【解决方案2】:

    您在一个选择框上选择了选定的选项,但在另一个选择框本身上选择了该选项。这导致 1 个data-pirce 属性始终为undefined。改正的时候。还添加了一个 if 语句来检查是否设置了有效值。

    /* * * * * * * * * * * * * * * * * *
     * Calculator
     * * * * * * * * * * * * * * * * * */
    $(function() {
      $("select.cover_question10").on("change", calc);
      $("select.cover_question15").on("change", calc);
    
      function calc() {
        var basePrice = 0;
        newPrice = basePrice;
    
        $("select.cover_question10 option:selected, select.cover_question15 option:selected").each(function() {
          console.log();
          if(/^[\.\d]+$/.test($(this).data('price'))) {
            newPrice += parseFloat($(this).data('price'), 10);
          }
        });
    
        var percentage = 0;
        $("input[type=checkbox].calculate:checked").each(function() {
          percentage += parseInt($(this).data('price'), 10);
        });
        newPrice = newPrice + (newPrice * percentage / 100);
        newPrice = newPrice.toFixed(2);
        $("#item-price").html(newPrice);
        $("#price").val(newPrice);
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <label>How long do you want the cover 10?</label>
    <select class="select cover_question10" name="cover_question10" id="cover_question">
      <option id="cover" value="Select">Select cover</option>
      <option id="cover_12" value="cover_12" data-price="90.76" data-capacity="12 Months Cover">12 Months Cover </option>
      <option id="cover_24" value="cover_24" data-price="124.50" data-capacity="24 Months Cover">24 Months Cover</option>
      <option id="cover_36" value="cover_36" data-price="135" data-capacity="36 Months Cover">36 Months Cover</option>
    </select>
    
    <br><br>
    <label>How long do you want the cover 15?</label>
    <select class="select cover_question15" name="cover_question15" id="cover_question">
      <option id="cover" value="Select">Select cover</option>
      <option id="cover_12" value="cover_12" data-price="104.26" data-capacity="12 Months Cover">12 Months Cover </option>
      <option id="cover_24" value="cover_24" data-price="145.50" data-capacity="24 Months Cover">24 Months Cover</option>
      <option id="cover_36" value="cover_36" data-price="195" data-capacity="36 Months Cover">36 Months Cover</option>
    </select>
    <br><br> £
    
    <span id="item-price">0.00</span>

    【讨论】:

    • 它仍然显示NaN 只是选择了一个选项。
    • @0stone0 我知道,这就是为什么我说需要选择两个选择选项。尽管必须选择两个选择框以提供正确的价格,但似乎很可能。如果不是一个简单的 if 语句可以解决它。
    • 嗨,这非常接近工作,但是有一个条件逻辑,因此用户实际上只能看到一个下拉菜单,因为另一个是隐藏的,这取决于他们之前回答的内容我的形式问题。
    • @user1348927 添加了检查,因此它也适用于 1 个选择框。查看添加的 if 语句。
    • 太好了!谢谢..有没有办法让它在输出中包含便士?因此,如果您选择 12 个月,数据价格为 90.76,但 0.76 未显示在总价格中
    猜你喜欢
    • 2023-03-19
    • 2019-02-22
    • 2019-09-28
    • 1970-01-01
    • 2016-09-08
    • 2012-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多