1. 程式人生 > >切換目錄的方法,涉及到迴圈內呼叫函式的變數的問題

切換目錄的方法,涉及到迴圈內呼叫函式的變數的問題

<!DOCTYPE html>
<html>
<head>
	<title>顯示</title>
	<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
	<style type="text/css">
		div{
			display: none;
		}
	</style>
</head>
<body>
	<input type="button" value="選項1" id="but1"
>
<input type="button" value="選項2" id="but2"> <input type="button" value="選項3" id="but3"> <input type="button" value="選項4" id="but4"> <div id="ch1" style="display: block;">選項1</div> <div id="ch2">選項2</div> <div id="ch3">選項3</div> <div id
="ch4">
選項4</div> <script type="text/javascript"> for(var i = 1; i <=4 ;i++){ (function(btn,divs){ var btn = $("#but" + i); var divst = $("#ch" + i); btn.on("click",function(){ for(var j = 1; j <= 5; j++){ var divs = $("#ch" + j); divst.css("display","block"
); divs.css("display","none"); console.log(divs); } }) })(i); }
</script> </body> </html>

點選事件內的i的變化

for迴圈內的i進入點選函式後,直接結束迴圈,變成5需要通過其他方法改變,我使用了新增閉包的方法。用jq寫原本準備寫更少的程式碼,結果發現並沒有簡便。

<!DOCTYPE html>
<html>
<head>
	<title>tab頁切換練習</title>

	<style type="text/css">
		#tab div {
			display: none;
		}

		#tab div.active {
			display: block;
		}

	</style>
</head>
<body>
	<div id="tab">
		<input type="button" class="btn" value="選項卡1">
		<input type="button" class="btn" value="選項卡2">
		<input type="button" class="btn" value="選項卡3">
		<input type="button" class="btn" value="選項卡4">

		<div class="content active">選項卡1的內容</div>
		<div class="content">選項卡2的內容</div>
		<div class="content">選項卡3的內容</div>
		<div class="content">選項卡4的內容</div>
	</div>
</body>

<script type="text/javascript">
	// tab切換按鈕列表
	var btns = document.getElementsByClassName("btn");

	// 內容div列表
	var divs = document.getElementsByClassName("content");

	// for (var i = 0; i < btns.length; i++) {
	// 	btns[i].index = i;

	// 	// i 是當前的索引
	// 	btns[i].onclick = function () {
	// 		// 1. 將div全部隱藏
	// 		for (var j = 0; j < divs.length; j++) {
	// 			divs[j].className = "content";
	// 		}
	// 		// 2. 將當前按鈕對應索引的div顯示
	// 		divs[this.index].className = "content active";
	// 	}
	// }

	for (var i = 0; i < btns.length; i++) {
		// i 是當前的索引
		btns[i].onclick = (function (index) {
			return function () {
				// 1. 將div全部隱藏
				for (var j = 0; j < divs.length; j++) {
					divs[j].className = "content";
				}
				// 2. 將當前按鈕對應索引的div顯示
				divs[index].className = "content active";
			}
		})(i);
	}


</script>
</html>

上面是兩種比較簡便的方法

直接用給input 和div賦class類,class較於id而言比較相容更多的內容,可以通用,而id具有唯一性。而用class得到的是陣列型別,可以通過索引得到指定的div然後更改屬性。其中,為了i能進入迴圈,改程式碼將i賦給一個index屬性,迴圈直接取index屬性的相應的值。