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

我的 js 代码有什么问题。结果总是未定义?

我的 js 代码有什么问题。结果总是未定义?

浮云间 2021-08-20 17:47:04
我刚开始学习 javascript,我试图像计算器一样创建只是为了添加、减去、乘以和除以两个数字。但结果总是不确定的。你能告诉我问题出在哪里吗?    //Two functions    function output() {     var input1 = document.getElementById("nr1").value;     var input2 = document.getElementById("nr2").value;     var result = document.getElementById("result");      result.innerHTML = calculate(input1, input2).value;     }     function calculate(input1, input2) {       var add = document.getElementById("add");       var sub = document.getElementById("sub");       var mul = document.getElementById("mul");       var div = document.getElementById("div");       var rez       //How to know when we click one button?       if (add == true) {          rez = parseFloat(input1 + input2);          return rez;       } else if (sub == true) {          rez = parseFloat(input1 - input2);          return rez;       } else if (mul == true) {          rez = parseFloat(input1 * input2);          return rez;       } else if (div == true) {          rez = parseFloat(input1 / input2);          return rez;       } else {          return 0;   }}
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

calculate是一个返回数字的函数。数字没有value属性。你想要的只是函数内部的返回值,所以:


改变:


result.innerHTML = calculate(input1, input2).value;

至:


result.innerHTML = calculate(input1, input2);

而且,正如其他人在评论中指出的那样,您的if声明试图将页面中的元素与true.


相反,您应该检查元素包含的内容。如果是表单域(输入、选择、文本区域等),请检查元素的.value属性。如果没有,请检查其.textContent属性。现在,根据您的用例,您需要知道单击了哪个按钮,以便您可以执行正确的数学运算。为此,您需要处理click事件并执行正确的操作。请参阅以下内容以及可能的解决方案的评论:


// Get references to the elements you'll work with

let input1 = document.getElementById("one");

let input2 = document.getElementById("two");

let result = document.getElementById("result");


// Set up a click event hanlder at the document level

document.addEventListener("click", calculate);


function calculate(event) {

  // First, check to see if the event originated at one of the math buttons

  if(event.target.classList.contains("operator")){

    // One of the operator buttons was clicked.

    // Get the textContent of that button and do the appropriate math

    let operation = event.target.textContent;

    

    if(operation === "+"){

      // The prepended + sign converts the string value to a number

      result.textContent = +input1.value + +input2.value;

    } else if(operation === "-") {

      result.textContent =  +input1.value - +input2.value;

    } else if(operation === "*") {

      result.textContent =  +input1.value * +input2.value;

    } else {

      result.textContent =  +input1.value / +input2.value;

    }

  }

}

<input id="one"><br>

<input id="two">

<button type="button" class="operator">+</button>

<button type="button" class="operator">-</button>

<button type="button" class="operator">*</button>

<button type="button" class="operator">/</button>

<br>

<span id="result"></span>


查看完整回答
反对 回复 2021-08-20
?
慕慕森

TA贡献1856条经验 获得超17个赞

你为什么在 calculate(input1, input2).value 中做 .value ?因为你不是返回一个对象,而是一个数值,所以你不需要做 .value

使用 onclick 功能添加点击事件


查看完整回答
反对 回复 2021-08-20
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

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