[問題] function 裡的 setTimeout 與 變數

看板Ajax作者 (陸奧鬼一)時間15年前 (2008/10/03 12:57), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/6 (看更多)
最近寫了一個 javascript function, 目的是為了避免使用者連按兩次 button, 而且在 button disabled 後,還要能再變回 enabled, 發現了以下的問題: 參數: oBtn = 傳入的 button object sec = 倒數的秒數 flag = 是否變動 oBtn.value。true:要 / false:不要 function waitClick(oBtn, sec, flag) { if (oBtn==null) { return false; } if (sec==null) { sec = 5; } if (flag==null) { flag = false; } var descN = oBtn.value; var descT = descN; oBtn.disabled = true; for (var i=sec; i>0; i--) { if (flag) { descT = descN+"("+i+")"; } setTimeout(function() { oBtn.value = descT; //問題出在上面這行,descT 只會抓到前面 i=1 的值。 //不知道是否有高手可解惑? }, (sec-i)*1000); } setTimeout(function() { oBtn.value=descN; oBtn.disabled = false; }, sec*1000); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.8.189

10/03 13:24, , 1F
javascript是到執行function時才去抓descT的值喔。這時for
10/03 13:24, 1F

10/03 13:25, , 2F
loop已經跑完了啦。
10/03 13:25, 2F

10/03 16:19, , 3F
這是javascript最基本的現象,原因就是fillano大所說
10/03 16:19, 3F
文章代碼(AID): #18vQOwa6 (Ajax)
討論串 (同標題文章)
文章代碼(AID): #18vQOwa6 (Ajax)