老师麻烦看下代码遇到个问题我写在代码注释里面了

老师麻烦看下代码遇到个问题我写在代码注释里面了

1
<!DOCTYPE html><br><html lang="en"><br><head><br>    <meta charset="UTF-8"><br>    <meta http-equiv="X-UA-Compatible" content="IE=edge"><br>    <meta name="viewport" content="width=device-width, initial-scale=1.0"><br>    <title>Document</title><br></head><br><body><br>    <input type='text' id='num1' /><br>    <select id='operate'><br>        <option value='+'>+</option><br>        <option value="-">-</option><br>        <option value="*">*</option><br>        <option value="/">/</option><br>    </select><br>    <input type='text' id='num2' /><br>    <input type='button' value=' = ' id="btn" /><br>    <input type='text' id='result' /><br>    <script><br>        //先取到每个节点<br>        var num1 = document.getElementById('num1');<br>        var select_s = document.getElementById('operate');<br>        var num2 = document.getElementById('num2');<br>        var btn = document.getElementById('btn');<br>        var result = document.getElementById('result');<br>        //定义了一个盒子sum来装计算结果<br>        var sum = 0;<br>        //监听事件来决定进行什么运算然后把结果装进sum<br>        select_s.onclick = function () {<br>            var ysf = select_s.value;<br>            switch (ysf) {<br>                case '+':<br>                    sum = Number(num1.value) + Number(num2.value);<br>                    console.log(sum);<br><br>                    break;<br>                case '-':<br>                    sum = num1.value - num2.value;<br>                    break;<br>                case '*':<br>                    sum = num1.value * num2.value;<br>                    break;<br>                case '/':<br>                    sum = num1.value / num2.value;<br>                    break;<br><br>                default:<br>                    break;<br>            }<br><br>        }<br>        //但是不知道为什么这sum值并没有变化,我是定义的全局变量sum啊,,,老师求解<br>        console.log(sum);<br>        btn.onclick = function () {<br><br>            result.innerHTML = sum;<br>        }<br>    </script><br></body><br></html><br>


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

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

2回答
好帮手慕言 2021-04-01 15:48:33

同学你好,解答如下:

1、事件只有触发时才会执行,sum是在点击+-*/时才会重新赋值,在打印sum值的时候,点击事件还未触发,所以打印的sum值是初始值,也就是0。

2、给表单赋值,需要使用value属性,因此修改如下:

http://img1.sycdn.imooc.com//climg/606578d60983a23e04140126.jpg

3、两个输入框中都输入内容,例如数字5,点击等号,得到的结果是0,很显然,结果是不对的。

http://img1.sycdn.imooc.com//climg/606578e609a5ea5b06340051.jpg

这是因为在同学提供的代码中,只有点击+-*/时才会对sum重新赋值,点击等号不会改变sum的值,建议:点击等号就可以得出结果,修改如下:
http://img1.sycdn.imooc.com//climg/60657a430978152504850154.jpg

去掉如下代码(如果不去掉的话,按钮的第二个点击事件会覆盖第一个点击事件):

http://img1.sycdn.imooc.com//climg/60657a5409025b6a04830134.jpg

祝学习愉快~

qq_口天吴_0 2021-04-01 12:24:35
1
<!DOCTYPE html><br><html lang="en"><br><br><head><br>    <meta charset="UTF-8"><br>    <meta http-equiv="X-UA-Compatible" content="IE=edge"><br>    <meta name="viewport" content="width=device-width, initial-scale=1.0"><br>    <title>Document</title><br></head><br><br><body><br>    <input type='text' id='num1' /><br>    <select id='operate'><br>        <option value='+'>+</option><br>        <option value="-">-</option><br>        <option value="*">*</option><br>        <option value="/">/</option><br>    </select><br>    <input type='text' id='num2' /><br>    <input type='button' value=' = ' id="btn" /><br>    <input type='text' id='result' /><br>    <script><br>        //先取到每个节点<br>        var num1 = document.getElementById('num1');<br>        var select_s = document.getElementById('operate');<br>        var num2 = document.getElementById('num2');<br>        var btn = document.getElementById('btn');<br>        var result = document.getElementById('result');<br>        //定义了一个盒子sum来装计算结果<br>        var sum = 0;<br>        //监听事件来决定进行什么运算然后把结果装进sum<br>        // 监听 "=" 按钮  btn  而不是监听选择按钮 + - * /  <br>        // select_s.onclick = function () {<br>        btn.onclick = function () {<br>            var ysf = select_s.value;<br>            switch (ysf) {<br>                case '+':<br>                    sum = Number(num1.value) + Number(num2.value);                   <br>                    console.log(sum);<br><br>                    break;<br>                case '-':<br>                    sum = num1.value - num2.value;<br>                    break;<br>                case '*':<br>                    sum = num1.value * num2.value;<br>                    break;<br>                case '/':<br>                    sum = num1.value / num2.value;<br>                    break;<br><br>                default:<br>                    break;<br>            }           <br>            //代码要移动到这里<br>            result.value = sum;<br>        }<br>        //但是不知道为什么这sum值并没有变化,我是定义的全局变量sum啊,,,老师求解<br>        console.log(sum);<br>        // btn.onclick = function () {<br><br>        //     // result.innerHTML = sum;<br>        //     //  计算结果sum 是要变成 result的值(value).而不是变成代码<br>        //     // 而且要在一次监听里面完成计算,  如果分开代码应该是覆盖了,重写了.<br>        //     result.value = sum;<br>        // }<br>    </script><br></body><br><br></html><br>


首先,我也是自学的,不是老师.解释不一定正确.但是代码已经实现功能了.

其次你这个代码的逻辑也太乱了,我记得回答里面还是笔记里面有一个标准答案,我也是参考那个的.我一开始写的稍微比较乱,但没你这么乱.我记得我有发布在笔记里面

  • 提问者 咸鱼王派大星 #1

    怎么写对我知道,只是想不通我定义的全局变量sum,经过了第一个onclick事件后在外面控制台打印sum还是为零。

    2021-04-01 14:23:25
  • qq_口天吴_0 回复 提问者 咸鱼王派大星 #2

    你监听的是 + - * / 的按钮啊 

    1
    select_s.onclick<br>

    你要是选择点击select_s的按钮,控制台就会出现sum值啊.

    你是不是点错了.

    我在代码中也备注了

    2021-04-01 14:47:08
  • 提问者 咸鱼王派大星 回复 qq_口天吴_0 #3

    你还没懂我意思 我的源代码是监听+ - * / 当我点了这其中一个就吧前后两个数字进行计算然后赋值给sum,我现在的疑问是为什么全局变量sum没有发生变化

    2021-04-01 15:20:41
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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