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

请教一个关于任务三的问题

        function checkone(){

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

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

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

                if(parseInt(j.charAt(i))>6){

                alert("选择1-6的数");

                break;

                }

                

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

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

                }

            }

这个代码,我如果在文本框中输入“8”,会弹出警告,如果我输入“128”,虽然会弹出警告,但依然会勾选第一个和第二个复选框,我如果希望只要有一个数字超出6,就不会有任何复选框勾选改如何做

正在回答

2 回答

function checkone() {
   var j = document.getElementById("wb").value;
   var hobby = document.getElementsByName("hobby");
   var str = j.split("");
   function sortnum(a,b){return b-a;}
   str.sort(sortnum);
   if(str[0]>6){alert("选择1-6的数");}
   else{
       for(var i=0;i<str.length;i++)
       {
           hobby[str[i]].checked=true;
       }
   }
}

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

kuban

hobby[str[i]-1].checked=true;这里修正一下
2016-05-25 回复 有任何疑惑可以回复我~
#2

秋水流到冰 提问者

多谢解惑,对循环的理解理解又深了些
2016-05-25 回复 有任何疑惑可以回复我~
#3

慕粉3274123 回复 kuban

我想问一下,上面的代码中,如果我在输入框输入,“02”这个数据,为什么不会出现程序错误呢?你前面把该数据分成["0","2"],在执行for循环时,应该还有”hobby[str[0]-1].check=true“这个判断吧。我试过输出这个数据,是underfined。为什么没有影响程序执行呢?
2016-07-15 回复 有任何疑惑可以回复我~
#4

kuban 回复 慕粉3274123

上面的小例子逻辑确实不严谨,只是单纯演示提问者想要的效果的实现思路。02这个数据是会错误中断的,假如你在for循环中的hobby[str[i]-1].checked=true;后面添加一个alert("OK"),你会发现在单输入小于1的数时,是没有弹出信息的,这说明程序确实会中断执行
2016-07-21 回复 有任何疑惑可以回复我~
#5

kuban 回复 慕粉3274123

而“02”这个数据你没感觉到被中断执行时因为我对input中的数字做了降序排序,会先执行hobby[str[2]-1].check=true,这样看起来是正确的没有影响到正常数据的执行,但实际上马上”hobby[str[0]-1].check=true就中断了,只是中断前正常数据已经都得到了执行,所以结果上看是正确的。
2016-07-21 回复 有任何疑惑可以回复我~
#6

慕粉3274123 回复 kuban

谢谢你的解答,虽然还是不太明白,要等自己好好思考一下。在这个课程看到你很多的身影,你应该是传中中的大神吧。。。什么都懂。。
2016-07-21 回复 有任何疑惑可以回复我~
#7

kuban 回复 慕粉3274123

不是,我只是喜欢多看点不同角度产生的问题来对我掌握的知识进行查漏,如果有问题我不知道答案,那肯定是我知识点有空白的部分,每个人思路不一样,我想不到的问题会被别人提出来,多看看不同的错误有助于加深理解
2016-07-21 回复 有任何疑惑可以回复我~
#8

慕粉3274123 回复 kuban

感觉JS这些内容很难学啊,很多东西都理解不了,在编程的时候,缺少思路,那该如何提升自己?如果有问题,可以直接问你吗?
2016-07-21 回复 有任何疑惑可以回复我~
#9

kuban 回复 慕粉3274123

见得例子多了就有思路了,多看吧,课程问题最快的答复肯定是课程下面的提问,我只是有空才会上来看看站内信
2016-07-21 回复 有任何疑惑可以回复我~
#10

慕粉3274123 回复 kuban

那也足够了,先谢谢了。
2016-07-21 回复 有任何疑惑可以回复我~
查看7条回复

不知道你为什么要使用charAt(),不用就好了

function checkone() {
   var j = document.getElementById("wb").value;
   var hobby = document.getElementsByName("hobby");
   for (var i = 0; i < j.length; i++) {
       if (parseInt(j) > 6) {
           alert("选择1-6的数");
           break;
       }
       hobby[parseInt(j) - 1].checked = true;
   }
}

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

秋水流到冰 提问者

我的意思是我在文本框中一口气输入比如“124”可以一次勾选1 2 4三个复选框 我后来想了下 是不是可以把这个字符串拆成数组在升序排列,只要比较最大值就可以
2016-05-25 回复 有任何疑惑可以回复我~
#2

kuban 回复 秋水流到冰 提问者

想法很有意思,按照你的想法重新看了你代码给我看蒙了,不知道你有没有发现,你代码目前实现的效果是碰巧借助了报错停止实现了正确效果的,128可选12,812呢?肯定不会选12,因为报错了,其实128也报错了,只不过执行完了正确选择才报错停止的。按你想法改动的正确代码下面给你贴出来
2016-05-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468191    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

请教一个关于任务三的问题

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