为什么这两个做法都没反应呢?

为什么这两个做法都没反应呢?



<!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=' = ' onclick="count()" />

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

    <script type="text/javascript">

        var num1 = document.querySelector('#num1').value,

            num2 = document.querySelector('#num2').value,

            operate = document.querySelector('#operate').value,

            result = document.querySelector('#result').value;


        function count() {

            /*此处写代码*/

            switch (operate) {

                case '+':

                    return result = +num1 + +num2;

                    break;

                case '-':

                    return result = num1 - num2;

                    break;

                case '*':

                    return result = num1 * num2;

                    break;

                case '/':

                    return result = num1 / num2;

                    break;

            }

        }

    </script>

</body>


</html>




<!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=' = ' onclick="count()" />

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

    <script type="text/javascript">

        

        function count() {

            /*此处写代码*/

            var calculator={

                num1:document.querySelector('#num1').value,

                num2:document.querySelector('#num2').value,

                operate:document.querySelector('#operate').value,

                result:document.querySelector('#result').value

            };

            

                switch(calculator[operate]){

                case '+':

                    return calculator.result = +calculator.num1 + +calculator.num2;

                    break;

                case '-':

                    return calculator.result = calculator.num1 - calculator.num2;

                    break;

                case '*':

                    return calculator.result = calculator.num1 * calculator.num2;

                    break;

                case '/':

                    return calculator.result = calculator.num1 / calculator.num2;

                    break;

            }

        }

    </script>

</body>

</html>



正在回答

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

3回答

同学你好,理解的有些偏差,可以参考下方再理解下:
1、关于同学的第一条,是不需要加引号的,加引号会报错,正确写法如下:

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

控制台:

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

2、关于同学的第二条,理解的是正确的,例如:

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

控制台:
http://img1.sycdn.imooc.com//climg/5e702dec097c367b01150087.jpg

3、如果是变量的话,不需要加引号,如下:

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

控制台:
http://img1.sycdn.imooc.com//climg/5e702db609c0c2c002230094.jpg

同学可以动手写一写代码,理解的会更深刻。祝学习愉快~

好帮手慕言 2020-03-16 19:46:31

同学你好,关于同学得疑问,解答如下:
1、代码从上往下运行,在获取num1和num2时,还没有在输入框中输入内容,num1和num2的值为空,如下:

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

控制台:
http://img1.sycdn.imooc.com//climg/5e6f650409b040ba05430138.jpg

因此要把获取元素的值放在count函数里。

2、可以理解为固定的写法,要加引号。如果是下方的写法,也可以实现效果

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

3、如果按照同学这样写(下方截图),result是一个变量,并不可以通过result直接修改内容,这个需要同学记住

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

祝学习愉快~

  • 提问者 Aurora_Meteor #1
    您的第二点,是不是: 1、对象自带的属性可以直接用‘.’来写(此时带不带引号都可以) 2、对象自带的属性用‘[]’写时必须带引号 3、不是对象自带的属性也就是一个变量时只能用‘[]’来写且必须带引号?
    2020-03-16 19:58:57
好帮手慕言 2020-03-16 17:17:01

同学你好,关于同学的疑问,解答如下:

1、第一段代码:获取元素的代码要放到count函数里,不然获取输入框里面的内容会是空,具体修改可以参考下方:

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

修改后的代码:

<script type="text/javascript">
        function count() {
            var num1 = document.querySelector('#num1').value,
                num2 = document.querySelector('#num2').value,
                operate = document.querySelector('#operate').value,
                // result = document.querySelector('#result').value;
                result = document.querySelector('#result');
            switch (operate) {
                case '+':
                    return result.value = +num1 + +num2;
                    break;
                case '-':
                    return result.value = num1 - num2;
                    break;
                case '*':
                    return result.value = num1 * num2;
                    break;
                case '/':
                    return result.value = num1 / num2;
                    break;
            }

        }
    </script>

2、第二段代码:switch的条件不对,要使用字符串的形式,另外:获取result时不是直接获取value,要在赋值时写value,如下:

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

修改后的代码:

<script type="text/javascript">
        function count() {

            /*此处写代码*/

            var calculator = {
                num1: document.querySelector('#num1').value,
                num2: document.querySelector('#num2').value,
                operate: document.querySelector('#operate').value,
                // result: document.querySelector('#result').value
                result: document.querySelector('#result')
            };
            // switch (calculator[operate]) {
                switch (calculator["operate"]) {
                case '+':
                    return calculator.result.value = +calculator.num1 + +calculator.num2;
                    break;
                case '-':
                    return calculator.result.value = calculator.num1 - calculator.num2;
                    break;
                case '*':
                    return calculator.result.value = calculator.num1 * calculator.num2;
                    break;
                case '/':
                    return calculator.result.value = calculator.num1 / calculator.num2;
                    break;
            }

        }
    </script>

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 Aurora_Meteor #1
    针对您的第一个:您说“获取元素的代码要放到count函数里,不然获取输入框里面的内容会是空”,是因为获取元素的代码写在count外面并且没有给count传参数所以count里面的变量全是空吗?应该是count内的变量为空不是获取输入框里面的内容为空吧? 针对您的第二点:operate不就是calculator的属性吗?为什么必须要加引号呢?而且我之前使用calculator.operate也没效果为什么?还有为什么‘获取result时不是直接获取value,要在赋值时写value’呢?我们修改的不就是result的value吗,怎么不能直接获取并修改呢?
    2020-03-16 17:55:26
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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