我的小费计算器代码不起作用。代码中的错误在哪里?

My tip calculator code is not working. Where is the error in the code?

提问人:Garry 提问时间:9/10/2022 更新时间:9/10/2022 访问量:110

问:

我认为代码的两个问题是它没有保存输入值,因此代码没有显示任何结果,其次,每次从下拉列表中只选择第一个选项。请让我知道代码中的错误。我是编码新手。

<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Tip Calculator</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
<link rel="stylesheet" href="styles.css"  />
  </head>
  <body>
    <form>

      <div class="mb-3">
        <label  class="total form-label">Total Bill</label>
        <input type="number" class="form-control" id="bill" >
        <div id="emailHelp" class="form-text">Please Enter your bill in numbers only.</div>
      </div>
      <div class="mb-3">
        <label class="form-label">Number of People</label>
        <input type="number" class="form-control" id="people">
      </div>
      <!-- <div class="mb-3 form-check">
        <input type="checkbox" class="form-check-input" id="exampleCheck1">
        <label class="form-check-label" for="exampleCheck1">Check me out</label>
      </div> -->
      <select class="form-select" id="myValues">
        <option value="30%">Select the service quality</option>
    <option value="30%">30% - Outstanding</option>
    <option value="20%">20% - Good</option>
    <option value="15%">15% - it was okay</option>
    <option value="5%">5% - Terrible</option>
  </select>
      <button type="submit" class="btn btn-primary">Calculate</button>
    </form>
    <div id="totalTip">
                       <sup>$</sup><span class="form-label" id="tip">0.00</span>
                       <small id="each">each</small>

               </div>

  </body>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="tip.js" charset="utf-8"></script>
</html>

这是 javascript 代码

var a = $("#bill").val();
var b = $("#people").val();
var c = $("#myValues").find('option:selected').val();

$(".btn").click(function () {
$("#tip").html(calculateTip(a, b, c));
});
function calculateTip (total, people, select) {
     var d = total/people;
     var e = d*(select/100);
     return e;
}
// calculateTip(a, b, c)
JavaScript HTML jQuery 数学 计算器

评论


答:

1赞 Wesley Smith 9/10/2022 #1

有几个问题很突出。

  1. 在脚本的开头,在用户与窗体交互之前定义 A、B 和 C。我们应该在点击处理程序定义,这样当单击按钮时,它们将被评估和设置。

  2. 您可能希望在单击处理程序内部添加一个以停止默认提交行为(即阻止它尝试提交表单)e.preventDefault();

  3. 您无需为 #myValues 查找所选选项,您可以直接通过以下方式访问当前选择的值$("#myValues").val()

  4. 您需要从选项值中删除 ,以便您可以使用该值进行数学运算(您将获得 NaN 和 inplace,使该值成为字符串。%%

  5. 您可能需要在提示结果中添加 a,以强制其四舍五入到小数点后 2 位并截断,以避免长重复小数.toFixed(2)

$(".btn").click(function(e) {
  e.preventDefault();
  let a = $("#bill").val();
  let b = $("#people").val();
  let c = $("#myValues").val();
  let tip = calculateTip(a, b, c);
  $("#tip").html(tip);
});

function calculateTip(total, people, select) {
  var d = total / people;
  var e = d * (select / 100);
  return e.toFixed(2);
}
<html lang="en" dir="ltr">

  <head>
    <meta charset="utf-8">
    <title>Tip Calculator</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
    <link rel="stylesheet" href="styles.css" />
  </head>

  <body>
    <form>

      <div class="mb-3">
        <label class="total form-label">Total Bill</label>
        <input type="number" class="form-control" id="bill">
        <div id="emailHelp" class="form-text">Please Enter your bill in numbers only.</div>
      </div>
      <div class="mb-3">
        <label class="form-label">Number of People</label>
        <input type="number" class="form-control" id="people">
      </div>
      <!-- <div class="mb-3 form-check">
        <input type="checkbox" class="form-check-input" id="exampleCheck1">
        <label class="form-check-label" for="exampleCheck1">Check me out</label>
      </div> -->
      <select class="form-select" id="myValues">
        <option value="30">Select the service quality</option>
        <option value="30">30% - Outstanding</option>
        <option value="20">20% - Good</option>
        <option value="15">15% - it was okay</option>
        <option value="5">5% - Terrible</option>
      </select>
      <button type="submit" class="btn btn-primary">Calculate</button>
    </form>
    <div id="totalTip">
      <sup>$</sup><span class="form-label" id="tip">0.00</span>
      <small id="each">each</small>

    </div>

  </body>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

</html>

评论

0赞 Riccardo LV 9/10/2022
我投票给它 b/c,这是一个非常干净和清晰的解决方案。只是一个非常非常小的建设性批评:我会为变量分配有意义的名称,并且我会避免将其中一个称为“e”(以免将其与单击函数的事件/参数混淆)。