问答详情
源自:9-4 区别getElementByID,getElementsByName,getElementsByTagName

最后一个函数为什么运行不了呢

<!--<!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");-->
       <!--for(var i=0;i<hobby.length;i++){-->
           <!--hobby[i].checked=true;-->

       <!--}-->
       <!--// 任务1-->

   <!--}-->
   <!--function clearall(){-->
       <!--var hobby = document.getElementsByName("hobby");-->
       <!--//alert(hobby.length);-->
       <!--for(var i=0;i<hobby.length;i++){-->
           <!--hobby[i].checked=false;-->
       <!--}-->
       <!--// 任务2-->

   <!--}-->

   <!--function checkone(){-->
       <!--clearall();-->
      <!--var hobby = document.getElementsByName("hobby");-->
       <!--var j=document.getElementById("wb").value;-->
       <!--for(var i=0;i<j.length;i++){-->
            <!--if(j.charAt(i)>6 || j.charAt(i)<1){-->
               <!--alert("越界,请重新输入!");-->
               <!--document.getElementById("wb").value="";-->
           <!--}-->
       <!--}-->
       <!--for(var n=0;n<j.length;n++){-->

           <!--hobby[(j.charAt(n))-1].checked=true;-->
       <!--}-->



   <!--}-->

<!--</script>-->
<!--</body>-->
<!--</html>-->



<!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");
       for (var i=0;i<hobby.length;i++){
           hobby[i].checked=true;
       }

       // 任务1

   }
   function clearall(){
       var hobby = document.getElementsByName("hobby");
       for(var i=0;i<hobby.length;i++){
           hobby[i].checked=false;
       }

       // 任务2

   }

   function checkone(){

      //任务三

       var hobby=document.getElementsByName("hobby");
       var j=document.getElementById("wb").value;
       for (var i=0;i<j.length;j++){
           if (j.charAt(i)>6||(j.charAt(i)<1)){
               alert("越界 请输入");
               document.getElementById("wb").value="";
           }
       }

       for (var n=0;n<j.length;n++){
           hobby[(j.charAt(n))-1].checked=true;
       }

   }

</script>
</body>
</html>

提问者:慕数据9493197 2016-09-10 22:57

个回答

  • 魔法师李维
    2016-09-14 14:47:29

      function checkone(){

            //获取到name='hobby'的对象数组,长度为6
           var hobby=document.getElementsByName("hobby");

          //获取到ID为wb的对象的值 就是你在地址中输入的值
           var j=document.getElementById("wb").value;
            

          //判断j值是否合法
           if (j>6||j<1){
                   alert("越界 请输入");
                   document.getElementById("wb").value="";
            }else{

                    //获取j对应的对象数组的下标

                    var k = j-1;

                    hobby[k].checked = true;

            }

       }

    很不幸 你的j.length 是从头错到尾巴的,j本身只是一个字符串,你的length只能获取到j本身这个字符串的长度,

    如果你输入的是300,j就是300,j的长度就是3;    你循环的毫无意义。


    更加优雅的代码如下

            function checkone(){

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

                if(j>0&&j<7){

                    var hobbyId = 'hobby'+j;

                    var theOne  = document.getElementById(hobbyId);

                    theOne.checked = true;

                }else{

                    alert('please input the right number');

                }

            }


  • 慕粉3725385
    2016-09-12 16:28:14

    (1) if(j.charAt(i)>6 || j.charAt(i)<1){}   //这里应该是输入的一段字符串,比如123。然后用字符串的下标,循环从0开始遍历,返回来单个字符串。只要这个字符是1和6之间就不会弹出越界框框。

     (2)   for(var n=0;n<j.length;n++){    
           hobby[(j.charAt(n))-1].checked=true;} // 这里charAt(n)返回的单个字符,然后减1是这个字符的下标,比如123字符串中的1字符下标是0.

  • 银白的天空
    2016-09-11 12:44:59

    嗯。。我尽我的能力回答吧。

    clearall();//没有找到相关明确的意思
       var hobby = document.getElementsByName("hobby");//通过“hobby”来获取元素,并返回包含所有“hobby”名字的元素的数组
       var j=document.getElementById("wb").value;//获取id为wb文本框的值

       for(var i=0;i<j.length;i++){
           if(j.charAt(i)>6 || j.charAt(i)<1){//charat()函数用于返回指定位置的字符,所以这里没弄明白是怎么回事。因为根据上下文,j的值很有可能只是一个数字,而不是一个字符串。我认为这里应该是让用户输入一个1——6的数字,如果这个数字超过了1-6的范围,那么则提示越界,需要用户重新输入
               alert("越界,请重新输入!");
               document.getElementById("wb").value="";//反之,获取wb文本框中的值
           }
       }
       
       for(var n=0;n<j.length;n++){

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


    不知道是不是这样,仅供参考。我也是新手。