懶人00
2016-09-05 19:44:17
<!DOCTYPE?html>
<html>
<head>
????<meta?charset="UTF-8">
????<title>Document</title>
</head>
<body>
????<input?type="button"?value="第一個"?/>
????<input?type="button"?value="第二個"?/>
????<input?type="button"?value="第三個"?/>
????<script>
????
????????var?btn?=?document.getElementsByTagName('input');????????????
????????????for(var?i?=?0;?i?<?btn.length;?i?++)?{
????????????btn[i].onclick?=?function(){
????????????????if(i==0){
????????????????????alert("這是第一個");
????????????????}
????????????????if(i==1){
????????????????????alert("這是第二個");
????????????????}
????????????????if(i==2){
????????????????????alert("這是第三個");
????????????????}????????????????????????
????????????}
????????}????????????????
????
????????
????</script>
</body>
</html>
3 回答
已采納

stone310
TA貢獻361條經驗 獲得超191個贊
i=0的時候判斷i<btn.length為true,然后i++,i=1;
i=1的時候判斷i<btn.length為true,然后i++,i=2;
i=2的時候判斷i<btn.length為true,然后i++,i=3;
i=3的時候判斷i<btn.length為false,
所以最后i為3
i放在事件內部是不會循環的,因為頁面加載時for循環綁定了?btn[i].onclick事件,而這是個異步加載,頁面加載好后i已經循環完畢,是個定值,就是btn.length,在這里即為3

黑女2008
TA貢獻75條經驗 獲得超32個贊
循環綁定,就相當于是每個按鈕有一個點擊事件,比如你點擊第一個的時候,調用第一個的事件,但是此時你的i是當時循環的時候的最后i的值,是3,并不是你這次點擊的第i個。
可以直接這樣寫:
var btn = document.getElementsByTagName('input'); ? ? ? ? ? ?
? ? ? ? ? ? for(var i = 0; i < btn.length; i ++) {
? ? ? ? ? ? btn[i].onclick = function(){
? ? ? ? ? ? alert(this.defaultValue); ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? }
? ? ? ? }
添加回答
舉報
0/150
提交
取消