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

请问加下划线这段for循环有什么问题么?为什么只能执行一次

<!DOCTYPE HTML>

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

        <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");

           

          // 任务1 加下划线的这段如果吧注释的那句取消注释就只能执行一次

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

          {

             //document.write(i);

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

              {

                  hobby[i].checked=true;

              }

          }

        }

        function clearall(){

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

            

         // 任务2    

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

          {

             // document.write(i);

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

              {

                  hobby[i].checked=false;

              }

          }  

        }

        

        function checkone()

        {

            

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

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

         // 任务3

         //document.write(j<hobby.length);

    if(j<hobby.length){

          

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

          {

             // document.write(i);

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

              {

                  hobby[i].checked=false;

              }

          }  

        hobby[(j-1)].checked=true;

        

        }

    

           else

         {

              alert('输入的数值溢出');

          }

        }

        </script>

    </body>

</html>


正在回答

4 回答

你的代码是完全没有问题的。至于下面这个语句:

document.write(i);

你需要知道:在window.onload事件之后(也就是网页加载完成之后)调用document.write的话会把整个文档都覆盖掉的(相当与重新加载,但是内容是由document.write()函数提供的)。

由于第一次执行之后,整个文档被冲掉了,意思就是你的各种复选框按钮也都不在了,那么下面的语句就会出错:

if(hobby[i].type=="checkbox")
{
    hobby[i].checked=false;
}

这时候javascript代码就出错停止了,所以整个网页只有一个数字0。

0 回复 有任何疑惑可以回复我~
#1

慕盖茨2022422 提问者

非常感谢
2016-09-01 回复 有任何疑惑可以回复我~

我把你的代码保存下来 执行, 没有问题的。 目测js 没什么问题

0 回复 有任何疑惑可以回复我~
#1

慕盖茨2022422 提问者

你试试把document.write(i);这句的注释取消,按我的想法屏幕上应该是可以打印出0~9的数字的但是运行的时候屏幕上只显示一个0
2016-08-31 回复 有任何疑惑可以回复我~

这个循环次数跟i的值有关,也就是和document.getElementsByTagName()取得的数组的大小有关,而数组的大小则取决于标签名为“input”的标签个数,需要看你整个的代码,单纯就这段代码是没问题的。

0 回复 有任何疑惑可以回复我~
#1

慕盖茨2022422 提问者

hobby.length打印出来是10可是进入for却只能执行一次,
2016-08-31 回复 有任何疑惑可以回复我~

hobby.length ; 看看 长度是多少。

0 回复 有任何疑惑可以回复我~
#1

慕盖茨2022422 提问者

长度打印出来是10
2016-08-31 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问加下划线这段for循环有什么问题么?为什么只能执行一次

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信