老师,不懂为什么这两行不可以

老师,不懂为什么这两行不可以

 oResult.value = Number(oNum1) +oOperate.value + Number(oNum2);

 oResult.innerHTML = Number(oNum1) +oOperate.value + Number(oNum2);




<!DOCTYPE html>

<html>

  <head>

    <title></title>

  </head>


  <body>

    <input type="text" id="num1" />

    <select id="operate">

      <option value="+">+</option>

      <option value="-">-</option>

      <option value="*">*</option>

      <option value="/">/</option>

    </select>

    <input type="text" id="num2" />

    <input type="button" value=" = " id="btn" />

    <input type="text" id="result" />

    <script>

      var oNum1 = document.getElementById("num1");

      var oOperate = document.getElementById("operate");

      var oNum2 = document.getElementById("num2");

      var oBtn = document.getElementById("btn");

      var oResult = document.getElementById("result");


      oBtn.onclick = function () {

        //   oResult.value = Number(oNum1) +oOperate.value + Number(oNum2);

        //   oResult.innerHTML = Number(oNum1) +oOperate.value + Number(oNum2);

      }; //不懂上面那两行不可以


      //当点击等号的时候

      btn.onclick = function () {

        //先把num1和num2的值赋给n1和n2

        var n1 = Number(oNum1.value);

        var n2 = Number(oNum2.value);

        //把operate的值赋给o1

        var o1 = oOperate.value;

        if (o1 == "+") {

          result.value = n1 + n2;

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

          result.value = n1 - n2;

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

          result.value = n1 * n2;

        } else if (o1 == "/") {

          result.value = n1 / n2;

        } else {

          alert("");

        }

      };


    //   用switch再解决一下这个问题

    </script>

  </body>

</html>



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕然然 2021-10-08 18:17:29

同学你好,原因如下:

首先,oResult为input文本输入框,需要通过value属性来获取和设置input输入框的内容,而不是innerHTML,所以,以下代码不正确

oResult.innerHTML = Number(oNum1)+oOperate.value+Number(oNum2);
//应将innerHTML修改为value

其次,代码中oNum1和oNum2为input元素,不应将input元素转换为数值类型,而应将input元素的输入内容转换为数值类型,前面说了获取input输入框的内容,需要使用value属性,即 

oResult.value = Number(oNum1.value) + oOperate.value + Number(oNum2.value);

最后,oOperate.value中的内容实际是字符串类型的+-*/,不会被当做算术运算符来执行算术运算,所以,最终结果是将所有内容拼接成一个字符串,如图

https://img1.sycdn.imooc.com//climg/616018c6096231dc07000068.jpg

解决方案:eval() 函数可用于计算某个字符串,并执行其中的 JavaScript 代码,如下

https://img1.sycdn.imooc.com//climg/61601a5109a6770d11490265.jpg

祝学习愉快!

  • 提问者 qq_慕仰20210716 #1

    oResult.innerHTML 

    老师,还不是很明白oResult.innerHTML 为什么不行,但是写value行

    2021-10-08 20:28:00
  • 同学你好,因为innerHTML属性用于设置或获取,开始标签和结束标签之间的HTML内容,如图

    https://img1.sycdn.imooc.com//climg/616102db09039eb912070265.jpg

    oResult为input输入框元素,这类表单控件元素的内容存放在value属性中,而不是开始标签和结束标签之间,如图

    https://img1.sycdn.imooc.com//climg/6161013b095beae911640163.jpg

    所以,需要通过value属性来设置或获取,这类表单控件元素中的内容,如图

    https://img1.sycdn.imooc.com//climg/6161044c09dc74af12060256.jpg

    祝学习愉快!

    2021-10-09 10:54:47
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师