我上火了,快帮我看一下

我上火了,快帮我看一下

<!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 num1=document.querySelector('#num1'),
             sign=document.querySelectorAll('#operate'),
             num2=document.querySelector('#num2'),
             result=document.querySelector('#result'),
             button=document.querySeletor('button');
             
        button.onclick:function add(num1,num2){
             return +num1.value++num2.value;
             }
        button.onclick:function sub(num1,num2){
            return num1.value-num2.value;
            }
        button.onclick:function multiple(num1,num2){
            return num1.value*num2.value;
        }
        button.onclick:function div(num1,num2){
            return num1.value/num2.value;
        }
        switch(sign.value){
            case '+':result.value=add();
            break;
            case '-':result.value=sub();
            break;
            case '*':result.value=multiple();
            break;
            case '/':result.value=div();
            break;
        }     
             
        }
    </script>
</body>
</html>


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

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

5回答
提问者 Ting111 2019-11-07 18:55:43

我看到js对象才发现你让我看的那章在这章后面???

好帮手慕言 2019-10-25 16:12:28

同学你好,因为时间长了,肯定会有遗忘的,但是不要着急,这些都是正常的现象,老师也非常理解。为了帮助同学能够更好的学习,给同学一个学习的建议吧

如果是以前学过的知识遗忘了,建议同学去复习一下知识。前面讲解的知识都是为后面的知识作为铺垫的哦。所以要多复习。

如果是现阶段的知识没有理解,可以多看几遍视频,多敲几遍代码,如果还有不能理解的,可以在问答区进行提问,老师会帮助同学解答哒。

老师对同学的问题解答之后,因为老师讲解的比较详细,所以文字会比较多,同学要有耐心去理解每一句,每一个知识点。这样才能够提升自己的技术哦

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

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

好帮手慕夭夭 2019-10-23 12:09:10

你好同学,这位同学语法和逻辑都是对的,肯定没有问题啊。老师上传回复,给你截图讲解的对象的语法同学看了吗?并且给出视频地址同学复习了吗?

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

再看看这位同学的语法,就是定义的对象,对象中定义的方法:

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

而同学这里是为一个元素绑定事件,后面是事件要执行的内容,所以需要使用等号。这个完全是两码事。

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

因为这位同学是在对象中的方法里面计算的结果,所以后面循环的时候,使用的就是对象调用方法(也是固定的语法)

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

而你的代码中本身是想要绑定一个事件,事件触发的时候,后面的函数就会执行了, 所以给事件后面加函数名没有任何意义,并且事件后面的函数只能传递event对象,你这里传递两个参数也毫无意义。

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

还有你的代码没有button这个标签,但是却使用它获取了。那么什么都获取不到。而且获取select,直接使用querySelector就行,返回的就是一个dom对象。使用querySelectorAll返回的是一个类数组

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

这位同学就直接使用getElementById,这个方法返回的就是dom对象。并且获取的id名在html中都有定义:

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

这位同学的代码中,函数包裹了循环http://img1.sycdn.imooc.com//climg/5dafd09d09cb391c04850190.jpg

但你的代码中包裹了全部的代码:

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

如下地方加一个空格,不然的话会被当成自加运算符了哦。

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

另外,老师上次也说了,因为你现在基础底子是比较差的,语法不熟悉,所以你会觉得和老师和其他人写的的差不多为啥就是不行。希望同学能够认真听取老师的建议,先把前面的课程复习一下,真正学会了再去做这个练习。 

也希望同学暂时不要再和视频或者其他同学的进行比较了,因为你语法不熟悉的话,可能还是会一知半解,这样学习效率太慢了。即使明白了当下的,但是你基础不好学习后面的也是寸步难行。

所以把视频复习一下,学会了。再把代码一行一行的认真去思考,会非常容易理解的。

祝学习愉快,望采纳。

  • 提问者 Ting111 #1
    前几天已经在重看函数了 我是上班不忙才有时间看这个 记性本来也不好,所以很多东西会忘记 但我不是个弱智
    2019-10-25 07:48:46
好帮手慕夭夭 2019-10-22 16:24:11

你好同学,解答如下:

1.视频中是对象中保存属性与属性值的语法,这个在前面课程讲解过(如下)。而同学这里是给元素绑定一个点击事件,是一条语句,这个都是固定的语法。

如下视频的地址:https://class.imooc.com/lesson/791#mid=19886

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

2.因为你把循环放在了点击事件外边哦,循环需要在点击事件触发的时候执行,这样才能给等号右侧的输入框设置结果。所以需要封装成函数,在事件中调用此函数。如果不封装成函数,就直接把循环那一部分代码放在外部。都一样

不理解你说的黑盒子是什么,代码不在函数中包裹,才叫暴露。就是为了让代码不暴露在外部才会使用函数封装的。并且这里涉及不到暴露不暴露的问题,如果不封装成函数,就要把代码放在事件中。因为点击等号的时候,需要执行这个循环来设置结果。

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

同学在写的时候,就会觉得和老师的差不多为啥就是不行,实际上是你对语法不熟悉导致的。老师给你两个建议,希望能够帮到你更好的学习好知识:

  1. 把前面的课程复习一下,课程中的知识点可以做一下笔记。因为长时间不看肯定会忘记,有了笔记隔一段时间复习一下,加深印象。

  2. 学习的时候也不能光看不练。课程中讲解的一定要多敲几遍。程序员最重要的还是要写代码哦。等你把课程中的案例练习熟练后,再来做练习或者作业,这样才能巩固。如果课程中的例子哪里不明白,在问答区提问,老师会帮你解答的哦。

祝学习愉快,望采纳。

  • 提问者 Ting111 #1
    我第一次写出来的代码是看着别人的写出来的,为什么他的没有问题 https://class.imooc.com/course/qadetail/160105这里的
    2019-10-22 16:40:51
  • 提问者 Ting111 #2
    为什么我用+num1.value++num2.value就报错,视频里就可以
    2019-10-22 17:09:19
好帮手慕夭夭 2019-10-21 17:32:36

你好同学,老师教你如何查找并解决问题。如果遇到问题,可以按F12查看控制台是否有报错:

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

上面报错是说冒号是不期望的标记,这种情况就是语法用错了。点击报错后面的文件名即可跳到报错的代码:

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

很明显绑定点击事件,后面使用等号,但是同学使用了冒号。肯定会报错哦。改之后还不对就继续查看控制台报错,这里老师就不一一截图了,因为问题比较多,老师把改好的代码给你,参考改一下哦。

<!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' />

                    <!--value后面的属性值,=前后空格删掉  这里加一个id  onclick="count()"-->

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

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

    <script type="text/javascript">

    function count() {

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

                   // querySelectorAll返回的是一个类数组,如下使用querySelector

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

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

            result = document.querySelector('#result'),

            // 1.使用标签名获取,但是你的代码中并没有button这个标签,按钮用的是input标签哦

            // 2.querySelector之前拼的不对

            // button=document.querySeletor('button');

            button = document.querySelector('#button');

        


        // 下面的几个事件有如下几个问题:

        //1.点击事件后面的是事件处理函数,即点击事件触发才会执行的。后面给它加函数名,并在循环中自动调用逻辑不对哦。

        // 2事件处理函数中,参数只能传递event对象。你传递参数会被当成event对象,所以不要传递参数哦。

        // 3.点击等于号的时候,应该是给最后的输入框设置结果,即要把设置result放在事件中。你把result.value 设置结果放在事件外部,点击的时候也不会执行。

        // 4.你给button设置了4个点击事件,那么前三个会被覆盖的。


       

        button.onclick = function() {

            // 点击的时候把当前 运算符传递给函数

            resultFn(sign.value)

            console.log(sign)

            // return +num1.value++num2.value;

        }


        // button.onclick = function() {

        //     return num1.value - num2.value;

        // }


        // button.onclick = function() {

        //     return num1.value * num2.value;

        // }


        // button.onclick = function() {

        //     return num1.value / num2.value;

        // }


        function resultFn(sign) {

            switch (sign) {

                case '+':

                    result.value=parseInt(num1.value)+parseInt(num2.value);

                    break;

                case '-':

                    result.value=num1.value - num2.value;

                    break;

                case '*':

                    result.value=num1.value * num2.value;

                    break;

                case '/':

                    result.value=num1.value / num2.value;

                    break;

            }

        }


    }


    // 所有的代码都放在了一个函数里面,当你点击等于号的时候,执行执行了这个代码里面所有的内容

    // 例如像里面的事件,点击的时候,只是为按钮绑定了事件,那么再次点击按钮的时候,才触发事件

    // 自动调用,为按钮绑定事件

    count()

    </script>

</body>


</html>

另外,从代码可以看出,同学基础掌握的还不是很好,建议复习一下课程,把课程案例多练习几遍,以巩固学过的知识。课程中有不懂的,可以在问答区提问,老师会为你讲解。把课程案例弄懂了,再来练习编程题。这一块逻辑有一点多,做不好也很正常。学习不要着急与浮躁,练习的时候踏实认真一点。加油!

祝学习愉快,望采纳。

  • 提问者 Ting111 #1
    那为什么有时候视频里面写的是 :function
    2019-10-22 07:28:42
  • 提问者 Ting111 #2
    resultFn(sign.value) 这个是哪里来的,我没有定义这个resultFN啊
    2019-10-22 09:29:31
  • 提问者 Ting111 #3
    我刚看到resultFN不好意思 但是为什么这个要用另一个函数封装,那样的话这个计算器不是就暴露了不算一个黑盒子了吗
    2019-10-22 09:34:10
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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