为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用单个事件侦听器而不是每个按钮中的 onclick 事件来做一个迷你计算器?

如何使用单个事件侦听器而不是每个按钮中的 onclick 事件来做一个迷你计算器?

猛跑小猪 2022-07-15 09:56:37
挑战是用一个输入、4 个按钮和一个输出做一个简单的迷你计算器。输入是添加一个将立即出现在输出中的数字,接下来我将选择四个按钮(+、-、*、/)中的一个来进行数学运算,然后在输入上再次写入另一个数字。在输出中将出现该操作的结果,进一步将通过再次单击按钮并添加另一个数字来继续进行数学运算,并始终实现结果。我之前在每个按钮中使用 onclick 事件并使用提示写入数字来完成此操作。现在我想使用输入来写入数字并使用一个事件侦听器来处理所有按钮。任何人都可以帮助我解决问题并向我解释每一步吗?到目前为止,这是我的代码:let input =document.querySelector('#input');let output =document.querySelector('#output');let divButtons = document.querySelector('#buttons');let messageOutput = (message) =>{   output.innerHTML = message;}messageOutput(input.value); // this doesn't work. What I miss to do show the input in the output?divButtons.addEventListener('click', () =>{ //do something})<section class="container">  <h1 class="heading">Do some maths</h1>  <div class="calculator">  <input class="inputNumbers" id="input" type="number" placeholder="choose a number here">  <div class="buttons" id="buttons">       <button id="plus" class="btn btn-plus">+</button>       <button id="minus" class="btn btn-minus">-</button>       <button id="multiply" class="btn btn-multiply">*</button>       <button id="divide" class="btn btn-divide">/</button> </div> <div id="output" class="visor"></div> </div></section>我是新手,所以我需要帮助来解决这个挑战并了解我应该做什么。谢谢
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

稍微修改了 JS 代码,使用您已经编写的侦听器,如果您需要更多解释,请告诉我。希望能帮助到你。


let input =document.querySelector('#input');

let output =document.querySelector('#output');

let divButtons = document.querySelector('#buttons');


let a = null;

let b = null;

let op = null;


let messageOutput = (message) =>{

   output.innerHTML = message;

}


messageOutput(input.value); // this doesn't work. What I miss to do show the input in the output?



divButtons.addEventListener('click', (event) =>{

 //checking if button is pressed

 if(event.target.type = 'submit') {

  //if a is not set before, meaning first time input

  if(a == null) {

    a = Number(input.value);

  } else {

    // second number

    b = Number(input.value);

    if(op == 'plus') {

      a += b;

    } else if(op == 'minus') {

      a -= b;

    }else if(op == 'multiply') {

      a *= b;

    } else {

      a /= b;

    }

  }

  //saving the operator that was pressed

  op = event.target.id;

  //showing output

  output.innerHTML = a + " " + op;


  //resetting input on each button pressed.

  input.value = '';

 }

});

<section class="container">


  <h1 class="heading">Do some maths</h1>


  <div class="calculator">


  <input class="inputNumbers" id="input" type="number" placeholder="choose a number here">


  <div class="buttons" id="buttons">

       <button id="plus" class="btn btn-plus">+</button>

       <button id="minus" class="btn btn-minus">-</button>

       <button id="multiply" class="btn btn-multiply">*</button>

       <button id="divide" class="btn btn-divide">/</button>

 </div>


 <div id="output" class="visor"></div>

 </div>


</section>


查看完整回答
反对 回复 2022-07-15
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

希望这可以帮助。稍微修改了您的代码段并添加了一些变量。


let input = document.querySelector("#input");

let output = document.querySelector("#output");

let divButtons = document.querySelector("#buttons");


let result = null;

let selectedOperation = null;


let messageOutput = message => {

  output.innerHTML = message;

};


divButtons.addEventListener("click", event => {

  //do something

  let id = event.target.id;

  let value = parseInt(input.value);


  switch (selectedOperation) {

    case "plus":

      result += value;

      break;


    case "minus":

      result -= value;

      break;


    case "multiply":

      result *= value;

      break;


    case "divide":

      result /= value;

      break;


    default:

      result = value;

      break;

  }


  selectedOperation = id;

  input.value = "";

  messageOutput(`${result} ${selectedOperation}`);

});


查看完整回答
反对 回复 2022-07-15
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

将您的输入数字保存到变量中,然后将用户单击的数学函数保存到变量中,然后使用用户输入的当前值作为因子将其应用于保存的输入数字。


像这样的东西:


let input = document.querySelector('#input');

let output = document.querySelector('#output');

let inputnumber = 0;

let subtotal = 0;

let total = 0;

let calculate = 0;

let x;

let y;

input.oninput = (e) => {

    if(subtotal == 0) {

        output.value = e.target.value;

    }

    x = Number(e.target.value);

    y = Number(subtotal);

    switch (calculate) {

        case "btn-divide":

        calc = y / x;

        break;

        case "btn-multiply":

        calc = y * x;

        break;

        case "btn-plus":

        calc =  x + y;

        break;

        case "btn-minus":

        calc = y - x;

        break;

        case 0:

        calc = x;

        break;

    }

    output.value = calc;

}

const divs = document.querySelectorAll('#buttons');

divs.forEach(el => el.addEventListener('click', event => {

    calculate = event.target.classList[1];

    input.value = null;

    subtotal = calc;

}));

<section class="container">


  <h1 class="heading">Do some maths</h1>


  <div class="calculator">


  <input class="inputNumbers" id="input" type="number" placeholder="choose a number here">

  

  <div class="buttons" id="buttons">

       <button id="plus" class="btn btn-plus">+</button>

       <button id="minus" class="btn btn-minus">-</button>

       <button id="multiply" class="btn btn-multiply">*</button>

       <button id="divide" class="btn btn-divide">/</button>

 </div>


 <input id="output" type="number" class="visor" value=0>

 </div>


</section>


查看完整回答
反对 回复 2022-07-15
  • 3 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信