作者s5846125 (陸奧鬼一)
看板Ajax
標題[問題] function 裡的 setTimeout 與 變數
時間Fri Oct 3 12:57:24 2008
最近寫了一個 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
推 fillano:javascript是到執行function時才去抓descT的值喔。這時for 10/03 13:24
→ fillano:loop已經跑完了啦。 10/03 13:25
→ todau:這是javascript最基本的現象,原因就是fillano大所說 10/03 16:19