鍍金池/ 問答/HTML/ 下列js代碼中checkone()函數(shù)代碼塊求解!

下列js代碼中checkone()函數(shù)代碼塊求解!

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>DOM 全選、取消全選</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.getElementsByName("hobby");
            for(var i=0;i<hobby.length;i++){
                hobby[i].checked=true;  //復(fù)選框選中狀態(tài)
                
            }
           
        }
        function clearall(){
            var hobby = document.getElementsByName("hobby");
            //alert(hobby.length);
            for(var i=0;i<hobby.length;i++){
                hobby[i].checked=false;
            }
            
        }
        
        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>

如上,代碼中checkone()函數(shù)代碼塊求解!尤其是for循環(huán)中的語句,有點(diǎn)迷。。。

回答
編輯回答
心夠野
        function checkone(){  //這段代碼的理解 ???
            clearall();
            var hobby = document.getElementsByName("hobby");
            var j=document.getElementById("wb").value;
            //輸入多個(gè)字節(jié) 如果有一個(gè)出錯(cuò)清空
            for(var i=0;i<j.length;i++){
                if(j.charAt(i)>6 || j.charAt(i)<1){
                    alert("越界,請重新輸入!");
                    document.getElementById("wb").value="";
                    return;//加個(gè)return
                }
            }
            //輸入多個(gè)字節(jié) 每個(gè)字節(jié)設(shè)置為選中
                for(var n=0;n<j.length;n++){
                   
                        hobby[(j.charAt(n))-1].checked=true; 
                }

            
            
        }

哪里迷,這代碼有問題,不符合規(guī)則還繼續(xù)執(zhí)行,會報(bào)錯(cuò)的。

2017年8月22日 22:27
編輯回答
落殤
function checkone() {
    clearall(); // 選一個(gè)之前先清空所有已選
    var hobby = document.getElementsByName("hobby"); // 所有愛好的 array
    var j = document.getElementById("wb").value; // 輸入框里愛好的 index
    for (var i = 0; i < j.length; i++) { // 有可能輸入的值是 136,此時(shí)就該勾選第1、3、6項(xiàng)
        if (j.charAt(i) > 6 || j.charAt(i) < 1) { // 判斷越界
            alert("越界,請重新輸入!");
            document.getElementById("wb").value = ""; // 越界后提示并重制狀態(tài)
        }
    }
    for (var n = 0; n < j.length; n++) {
        hobby[(j.charAt(n)) - 1].checked = true; // 通過所有判斷后勾選值
    }
}

有可能輸入值是432,那就該勾選第2、3、4項(xiàng)

2017年12月14日 08:51