亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

區別getElementByID,getElementsByName,getElementsByTagName這一課的問題

區別getElementByID,getElementsByName,getElementsByTagName這一課的問題

freefox 2016-03-30 18:40:35
<!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++) ???????????{ ??????????????hobby[i].checked=true; ???????????} ????????} ????????function?clearall(){ ????????????var?hobby?=?document.getElementsByName("hobby"); ???????????? ?????????//?任務2? ??????????for?(i=0;m<hobby.length;i++) ???????????{ ??????????????hobby[i].checked=false; ???????????} ???????????? ????????} ???????? ????????function?checkone(){ ????????????var?j=document.getElementById("wb").value; ???????? ?????????//?任務3 ?????????if?(j<7&&j>0) ?????????{ ????????????hobby[j-1].checked=true; ?????????} ????????else ????????{ ????????????alert("wrong?num."); ????????} ????????} ???????? ????????</script> ????</body> </html>代碼如上主要是倒數幾行任務3的問題(48-54),j可以實現else部分,就是說明他是整數,為什么上面if不能實現?我看高手有2個答案其一是類型轉換?var?hobby=document.getElementsByName("hobby"); ????????????hobby[parseInt(j)-1].checked=true;不是已經是數字類型嗎?我這里不是很明白。第二我壓根沒看懂”charat()“這里面有什么技巧和講究嗎?這個是排名第一的回答,我查了M3Cschool也沒能看明白,希望高手指點一下,先謝謝了!?for(var?n=0;n<j.length;n++){ ??????????????????? ????????????????????????hobby[(j.charAt(n))-1].checked=true;? ????????????????}
查看完整描述

2 回答

已采納
?
qq_沖哥_0

TA貢獻40條經驗 獲得超30個贊

1, 你的問題主要在文本框返回值的問題:文本框返回值是字符串,而不是數字,你的理解有問題。

var?j=document.getElementById("wb").value; ? ?你獲取的是一個文本框的里面的值,文本框返回的值就是字符串。

執行else并不能說明 j 是一個整數,因為在這里執行隱式類型轉化。如 "4"<7返回的也是true, 但你能說明 字符串"4" 是整數嗎?

同樣你的程序只所以能夠執行,也是隱式類型轉化, ?“4”-3 ==1 ;?字符串"4"轉化為數字,所有在做算術運算時,都要進行顯示類型轉化。parseInt(j


charAt(n)是返回字符串位于n索引的字符,"4".length 返回1, "4".charAt(0)就是返回字符"4",?

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

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

? }

j 是1-6,比如是4, 它是字符串"4",如上所述,?j.length = 1, n 只能取0,?j.charAt(n)) 就是"4".charAt(0),他返回字符"4", 此后還要隱式類型轉化,?“4”-1 = 3, 第四個閱讀 選中。


個人認為,用循環是最差的,循環要兩次,最大的問題是循環之后還要隱式類型轉化,和沒有用循環沒有區別。

?hobby[parseInt(j)-1] ?最好,當然不用也可以

查看完整回答
反對 回復 2016-03-31
?
賣火柴的小舒

TA貢獻42條經驗 獲得超16個贊

http://img1.sycdn.imooc.com//56fc88ed0001f47019200891.jpg

我沒怎么看明白你的表述。復制你的代碼在瀏覽器里面試了試,看到之所以沒選中的原因是報錯"hobby is not defined",也就是說hobby這個變量沒有定義,我看了一下你的聲明。? var?hobby?=?document.getElementsByTagName("input");這一句應該寫在checkall函數外面,你那樣寫這個變量的作用范圍只在checkall函數里,其它的函數是找不到這個變量的。

至于第二個問題,我只能告訴你“charAt() 方法可返回指定位置的字符?!睕]看到完整的代碼我也說不出具體的作用!

查看完整回答
反對 回復 2016-03-31
  • freefox
    freefox
    上面的代碼就是我看的課程的全部。
  • 2 回答
  • 0 關注
  • 1936 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號