Re: [問題] js在迴圈裡設定函數

看板Web_Design作者 (是妳)時間12年前 (2014/01/15 11:01), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《lturtsamuel (港都霹靂火)》之銘言: : 不好意思問題有點不清楚 : 我想問的是,在一個for迴圈中,變數i的質每次都會變 : 要怎麼用i來當作函數的變數呢? : 好像越講越不清楚,舉個例子好了 : 像是我html裡有三個div,id就叫d1,d2,d3好了 : 現在我想要設定他們的onclick,按到d1時會alert("hello 1!")這樣,以此類推 : 直覺想到的方法是 : window.onload = { : for(var i = 1; i <= 3; i++) { var d = getElementById('d' + i), message = 'hello' + i; : d.onclick = function() { alert(message); : }; : } : } : 不過這樣每個都alert("hello 4!") : 我的想法是把i用字面上的形式保留下來,不過不知道怎麼做 : 所以po來這邊請各位高手解答,感恩... 雖說用 closure 很潮,可是如果再這個使用情境,其實只要把message 先行算出即可。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.147.33

01/15 11:48, , 1F
其實你可以用推文,用closure可以減少重複的代碼數量
01/15 11:48, 1F

01/15 13:22, , 2F
很遺憾 你的方法會失效 XD
01/15 13:22, 2F

01/15 13:42, , 3F
用closure不是潮 是有其必要性
01/15 13:42, 3F

01/15 15:49, , 4F
http://jsfiddle.net/zw8S3/ 好好想清楚吧
01/15 15:49, 4F

01/15 15:50, , 5F
問題根本不在先行算出 而是後面的運算會取代前面的結果
01/15 15:50, 5F

01/15 15:50, , 6F
Javascript 裡面沒有 block 作用域 我猜你可能是寫 C 的
01/15 15:50, 6F
文章代碼(AID): #1IrVe8Oi (Web_Design)
文章代碼(AID): #1IrVe8Oi (Web_Design)