为什么结果是NaN

为什么结果是NaN

<!DOCTYPE html>
<html>

<head>
  <title> 事件</title>
</head>

<body>
  <input type='text' id='num1' />
  <select id='operate'>
    <option value='+' title='add'>+</option>
    <option value="-" title="subtract">-</option>
    <option value="*" title="multiply">*</option>
    <option value="/" title="divide">/</option>
  </select>
  <input type='text' id='num2' />
  <input type='button' value=' = ' />
  <input type='text' id='result' value="" />
  <script type="text/javascript">
    var num1 = document.getElementById("num1").value;
    var num2 = document.getElementById("num2").value;
    var sign = document.getElementsByTagName("option");
    var operate = document.getElementById("operate")
    var result = document.getElementById("result")
    var obj = {
      "+": function(num1, num2) {
        return +num1 + +num2
      },

      "-": function(num1, num2) {
        return num1 - num2
      },

      "*": function(num1, num2) {
        return num1 * num2
      },

      "/": function(num1, num2) {
        return num1 / num2
      }
    }

    function setSign() {
      operate.addEventListener("change", function() {
        result.value = obj[this.value]();
        console.log(this.title)

      })
    }
    setSign()
  </script>
</body>

</html>


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

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

3回答
好帮手慕言 2019-10-17 13:47:29

同学你好,可能是老师表达的不完整,让同学产生了误会。在点击operate时,如果输入框里面输入了内容,是可以获取到的,前提是在operate绑定的事件里去获取输入框中的内容。代码如下:
http://img1.sycdn.imooc.com//climg/5da7fd3109fce62807170213.jpg

在两个输入框中输入内容之后,再切换operate。

控制台:

http://img1.sycdn.imooc.com//climg/5da7fd6b09653ac414360332.jpg


从编程题的效果图中可以看出,是点击=号时,输入结果哦。事件应该绑定在=号上。

同学可以自己写一写,如果没有思路的话,可以参考这位同学的,链接:https://class.imooc.com/course/qadetail/160105

为了更高效的为同学解答,如果还有其他疑问的话,可以新建一个问答进行提问哦。

如果帮助到了你,欢迎采纳~祝学习愉快~

好帮手慕言 2019-10-17 09:53:04

同学你好,因为代码是从上往下开始解析的。

当解析到下面这段代码时,输入框里面还没有输入内容,因此获取的是空

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

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

我们可以打印一下:

http://img1.sycdn.imooc.com//climg/5da7c9150971ef1207160120.jpg

控制台:

http://img1.sycdn.imooc.com//climg/5da7c92909955b0805740231.jpg

在点击operate时,如果输入框里面输入了内容,是可以获取到的。

同学也可以打印一下哦

如果帮助到了你,欢迎采纳~祝学习愉快~

  • 提问者 顾兆昱 #1
    为什么我输入了数字以后,num1和num2的value还是空?
    2019-10-17 10:03:00
好帮手慕言 2019-10-16 14:30:14

同学你好,

1、首先调用obj里面的函数时,需要传递参数,同学没有传。

2、如果按照同学的写法,那么num1和num2的value值一直是空。

建议如下写法:

http://img1.sycdn.imooc.com//climg/5da6b7e8098e509a07900131.jpg

http://img1.sycdn.imooc.com//climg/5da6b7f209eff21308810196.jpg

但是如果要计算加法,那么只有在改变operate里面的内容(默认显示的是+,只有在切换到-或者/或者*后,再点击+,才会计算加法)

同学的这种思路可能不太准确。

建议:可以参考这位同学的思路哦,链接:https://class.imooc.com/course/qadetail/160105

如果帮助到了你,欢迎采纳~祝学习愉快~

  • 提问者 顾兆昱 #1
    为什么num1和num2的value一直是空呢?
    2019-10-17 02:59:36
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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