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

為了賬號安全,請及時綁定郵箱和手機立即綁定

編程挑戰:tab切換

?<script type="text/javascript">
??? // JS實現選項卡切換
??? var tab=document.getElementById("tab");
??? var ul=tab.getElementsByTagName("ul")[0];
??? var li=ul.getElementsByTagName("li");
???
??? var content=tab.getElementsByTagName("div");
???
??? for(var i=0,len=li.length;i<len;i++)
??? {
???????? li[i].onclick=function()
???????? {
???????????? for(var n=0;n<len;n++)
???????????? {
???????????????? if(i==n)
???????????????? {
???????????????????? li[n].className = "now";
???????????????????? content[n].className = "";
???????????????? }
???????????????? else
???????????????? {
???????????????????? li[n].className = " ";
???????????????????? content[n].className = "hide";
???????????????? }
???????????? }
???????? }
??? }

??? </script>

為什么無法切換?不對嗎?

正在回答

2 回答

這樣寫的錯誤在哪里呢,首先頁面加載的時候,會把你這段js代碼擼了一邊,關鍵點在執行到了for循環里面,到底是安什么邏輯執行的,回到頁面上看看,發現3個li元素鼠標移上去,樣式都變成可點擊的樣式了,說明這段代碼li[i].onclick=function(){func1}起了作用,但是在沒有點擊的情況下,func1是不會執行的,點擊li元素的時候,才執行func1,再看看執行func1的邏輯:for 循環,里面一個if...else...判斷,if的判斷條件是i==n,這個時候的i是多少很關鍵,在最外面的for循環在頁面加載的時候就已經執行完畢了,循環第一遍的時候i=0;i<3;i++,執行for循環里面的代碼,第二遍i=1;i<3;i++,還是執行里面的代碼,第三邊i=2;i<3;i++,繼續執行里面的代碼,第四邊i=3,這個時候i不小于3了,然后條件看不成立,就不再執行這個for循環了,所以,里面的for循環永遠只會執行else部分(因為i=3)你可以測試下在點擊的時候alert(i),li[i].onclick=function(){func1;alert(i);}

所以才會出現提示答案里的oLis[i].index = i這樣一句代碼,頁面加載的時候外面的for循環就實時給每個li元素自定義了一個index屬性,并賦值i(也就是分別為0,1,2)。

還有一個解決方法我也說不太明白(我也是初學者),如果要用這個方法你要去了解一下閉包立即執行函數,還有js的內存機制。具體寫法如下:

<script type="text/javascript">

? ? // JS實現選項卡切換

? ? var tab=document.getElementById("tab-list");

? ? var ul=tab.getElementsByTagName("ul")[0];

? ? var li=ul.getElementsByTagName("li");

? ? var content=tab.getElementsByTagName("div");

? ? for(var i=0,len=li.length;i<len;i++){

? ? (function(j){

? ? li[i].onclick=function()

? ? ? ? ?{

? ? ? ? ? ? ?for(var n=0;n<len;n++)

? ? ? ? ? ? ?{

? ? ? ? ? ? ? ? ?if(j==n)

? ? ? ? ? ? ? ? ?{

? ? ? ? ? ? ? ? ? ? ?li[n].className = "now";

? ? ? ? ? ? ? ? ? ? ?content[n].className = "";

? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ?else

? ? ? ? ? ? ? ? ?{

? ? ? ? ? ? ? ? ? ? ?li[n].className = " ";

? ? ? ? ? ? ? ? ? ? ?content[n].className = "hide";

? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ?}

? ? ? ? ?}

? ? })(i)

? ? }


? ? </script>


0 回復 有任何疑惑可以回復我~

if判斷哪把n改成this,因為我要指向到當前

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

編程挑戰:tab切換

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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