为了账号安全,请及时绑定邮箱和手机立即绑定

函数内调用其他函数的时候为什么没有执行呢?还有一些其他的问题,详请看备注

函数内调用其他函数的时候为什么没有执行呢?还有一些其他的问题,详请看备注

uwenhao2008 2016-01-11 09:43:22
<!DOCTYPE HTML> <html>     <head>         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">         <title>无标题文档</title>     </head>          <body>         <form>           请选择你爱好:<br>           <input type="checkbox" name="hobby" id="hobby1">  音乐           <input type="checkbox" name="hobby" id="hobby2">  登山           <input type="checkbox" name="hobby" id="hobby3">  游泳           <input type="checkbox" name="hobby" id="hobby4">  阅读           <input type="checkbox" name="hobby" id="hobby5">  打球           <input type="checkbox" name="hobby" id="hobby6">  跑步 <br>           <input type="button" value = "全选" onclick = "checkall();">           <input type="button" value = "全不选" onclick = "clearall();">           <p>请输入您要选择爱好的序号,序号为1-6:</p>           <input id="wb" name="wb" type="text" >           <input name="ok" type="button" value="确定" onclick = "checkone();">         </form>         <script type="text/javascript">         function checkall(){             var hobby = document.getElementsByTagName("input");             for(i=0;i<hobby.length;i++){                 if(hobby[i].type=="checkbox"){                     hobby[i].checked=true;                 }             }           // 任务1             }         function clearall(){             var hobby = document.getElementsByName("hobby");             for(i=0;hobby.length;i++){                 if(hobby[i].type=="checkbox"){                     hobby[i].checked=false;                 };                          }          // 任务2              }                  function checkone(){             var j=document.getElementById("wb").value;             var hobby = document.getElementsByName("hobby");//这句不能少,要不系统不知道hobby.是什么东西             if(j>6||j<0){                 alert("请确认输入的值!")                             }             else{             //我这里要写的是             //A:实现1,3这种识别方法,识别第一个和第三个选框??????????             //B:若有勾已经被选中了,则去除那个才选中别的                             //clearall();//在执行输入框选择前先清除先前的选择,但是一运行这句话后hobby[j-1].                 //checked=true就不起作用了,为什么?                 hobby[j-1].checked=true;//                 console.log(hobby[j-1]); //这里也不显示相关信息,不知道哪里用错了?                         }          // 任务3                  }                  </script>     </body> </html>我想问的问题在function checkone()里都有备注,请高人帮忙理一下我的思路,自己是在找不到问题原因。谢谢
查看完整描述

3 回答

?
qq_曾谭娥_0

TA贡献1条经验 获得超0个赞

<script type="text/javascript">

        function checkall(){

            var hobby = document.getElementsByTagName("input");

            for(i=0;i<hobby.length;i++){

                if(hobby[i].type=="checkbox"){

                    hobby[i].checked=true;

                }

            }

          // 任务1    

        }

        function clearall(){

            var hobby=[];

            var input = document.getElementsByTagName("input");

            for(var i=0;i<input.length;i++){

            if(input[i].getAttribute('name')=='hobby'){

            hobby.push(input[i])

            }

            }

            for(i=0;i<hobby.length;i++){

                if(hobby[i].type=="checkbox"){

                    hobby[i].checked=false;

                };

             

            }

         // 任务2     

        }

         

        function checkone(){


            var j=document.getElementById("wb").value;

            var input = document.getElementsByTagName("input");//这句不能少,要不系统不知道hobby.是什么东西

            var hobby=[];

            for(var i=0;i<input.length;i++){

            if(input[i].getAttribute('name')=='hobby'){

            hobby.push(input[i])

            }

            }

            if(j>6||j<=0){

                console.log("请确认输入的值!")                

            }

            else{

            //我这里要写的是

            //A:实现1,3这种识别方法,识别第一个和第三个选框??????????

            //B:若有勾已经被选中了,则去除那个才选中别的            

                clearall();//在执行输入框选择前先清除先前的选择,但是一运行这句话后hobby[j-1].

                //checked=true就不起作用了,为什么?

                hobby[j-1].checked=true;

                console.log(hobby[j-1]); //这里也不显示相关信息,不知道哪里用错了?            

            }

         // 任务3

         

        }

         

        </script>

获取的input name=hobby方法不是很对

查看完整回答
反对 回复 2016-01-13
?
ppo_YXWU

TA贡献9条经验 获得超1个赞

你的clearall函数里的for(i=0;hobby.length;i++){

改为for(i=0;i<hobby.length;i++){

然后你现在实现的识别只能单选的1-6,如果用1,3这种形式就会,因为j='1,3'出现无法识别hobby[j-1]的错误。

如果要多选,checkone函数要改成:

        function checkone(){
            var j=document.getElementById("wb").value;
            var hobby = document.getElementsByName("hobby");//这句不能少,要不系统不知道hobby.是什么东西
            //j得到的是1,3,4这样的字符串
            if(j=='')
              alert("请确认输入的值!");
            else{
              var str=j.split(',');//通过分割','符号分割成数组[1,3,4]
              clearall();
              for(var i=0;i<str.length;i++){
                if(0<str[i] && str[i]<7)
                  hobby[str[i]-1].checked=true;
              }
            }
        }


查看完整回答
反对 回复 2016-01-11
  • uwenhao2008
    uwenhao2008
    哦,看到了。谢谢你,我粗心了,但是我有个疑问,为什么即使 clearall函数里的for(i=0;hobby.length;i++)这里我这么写,单独点击 全不选 按钮的时候 清除所有勾的选项 的操作是有作用的呢?
  • ppo_YXWU
    ppo_YXWU
    这时这个循环就会继续,直到i=7;时hobby[7]不存在,出现hobby[i] is undefined的错误时才中断js。
?
伊望岁月

TA贡献13条经验 获得超1个赞

var hobby = document.getElementsByName("hobby");

这句是获取名称为‘hobby’的对象的集合。

至于其他问题都是因为下面这段代码错了

for(i=0;hobby.length;i++){

应该为

for(i=0; i < hobby.length; i++){


查看完整回答
反对 回复 2016-01-11
  • 3 回答
  • 1 关注
  • 1651 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信