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

任务一、任务二i<hobby.length,而任务三i<=hobby.length,为什么;hobby[i].checked怎么理解;任务三中的代码怎么理解?

<script type="text/javascript">
  function checkall(){
	  var hobby=document.getElementsByTagName("input");
	  for(var i=0;i<=hobby.length;i++){
		  hobby[i].checked=true;
		  }
	  }  //任务一
	  function clearall(){
		  var hobby=document.getElementsByName("hobby");
		  for(var i=0;i<=hobby.length;i++){
			  hobby[i].checked=false;
			  }
		  }  //任务二
		  function checkone(){
			  var j=document.getElementById("wb").value;
			  var hobby=document.getElementsByName("hobby");
			  var num=j.split("");
			  for(var i=0;i<hobby.length;i++){
				  hobby[num[i]-1].checked=true;
				  }
			  }  //任务三
			  function clearone(){
			  var j=document.getElementById("wb").value;
			  var hobby=document.getElementsByName("hobby");
			  var num=j.split("");
			  for(var i=0;i<hobby.length;i++){
				  hobby[num[i]-1].checked=false;
				  }
			  } 
</script>


正在回答

2 回答

function clearone(){   //函数名意思大概是  清除选中的check
    var j=document.getElementById("wb").value;  //取出输入框中的值并且赋值给j,j是字符串
    var hobby=document.getElementsByName("hobby"); //取出所有的复选框,存入类数组hobby
    //这个代码假设用户输入了一个或以上的数字,中间用空格隔开,比如:2 5 6
    var num=j.split("");   //因此去掉j之间的空格,把结果存入num,num是数组
    for(var i=0;i<hobby.length;i++){ //遍历num数组,hobby中第一是o,最后一个是length-1,i是num的序数,num数组的序数不可能大于hobby数组的长度。
    hobby[num[i]-1].checked=false; //num中存的是用户的输入,从1开始,转换为数组元素要-1
                  }

假设,用户输入的是 2 5 6

num=256

for循环中,第一次:

hobby[num[0]-1]  等价于hobby[2-1]等价于 hobby[1].用户的意思就是第二个复选框,因此输入2,转换成数组hobby中就是hobby[1]。把这个复选框设置为未选中状态

for循环三次,同上。


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

进击君

需要指出两点:第一是这个代码没有做输入溢出的判断,如果用户输入的不是1-6之间的数字,或者输入的个数超过了六个就会出现错误。 第二是,假设用户输入的没错,6位以内的1-6的数组,那么极限情况是1 2 3 4 5 6,num数组中存储了6个值,最大是num[5]=6,此时num和hobby数组是一样的。因此for循环遍历时,i=0;i<5,而hobby.length也是等于5的。所以是i<hobby.length
2016-12-07 回复 有任何疑惑可以回复我~
#2

进击君 回复 进击君

另外,在for循环条件判断里,i<num.length就行,假设用户输入的是 2,那么num元素只有一个,就是num[0]=1;此时还要让i<hobby.length=6实际上是不必要的。
2016-12-07 回复 有任何疑惑可以回复我~
#3

进击君 回复 进击君

235这样
2016-12-07 回复 有任何疑惑可以回复我~
#4

进击君

上面有个地方说错了,split函数是将字符串分割为字符串数组,并返回此数组。因此这个代码默认的用户输入是连在一起的,例如:235这样。不是我之前想的中间有空格隔开哈。
2016-12-07 回复 有任何疑惑可以回复我~
#5

MMJiao 提问者 回复 进击君

var num=j.split("")你解释是“去掉j之间的空格”不太理解,我认为是用空字符串去分割j这个字符串,作用是便于计算机识别用户输入的是一位数字,而不是二位、三位......不知道我的认识正不正确?
2016-12-08 回复 有任何疑惑可以回复我~
#6

MMJiao 提问者 回复 进击君

var num=j.split("")你的解释是“去掉j之间的空格”,不太理解;我认为是用空字符串分割j这个字符串,作用是便于让计算机识别用户输入的是一位数字,而不是二位、三位......不知道我这样理解对不对?
2016-12-08 回复 有任何疑惑可以回复我~
#7

进击君 回复 MMJiao 提问者

:)
2016-12-08 回复 有任何疑惑可以回复我~
查看4条回复



         // 任务3

function checkone(){

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

         if(j>=1&&j<=6){

        var hobby=document.getElementById("hobby"+j);

        hobby.checked=true;}

        else

        document.write("please input again");

        }


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

MMJiao 提问者

我发的任务三的代码可不可以用通俗易懂的话帮我解释下
2016-12-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

任务一、任务二i<hobby.length,而任务三i<=hobby.length,为什么;hobby[i].checked怎么理解;任务三中的代码怎么理解?

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