作者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
1F:推 fillano:javascript是到执行function时才去抓descT的值喔。这时for 10/03 13:24
2F:→ fillano:loop已经跑完了啦。 10/03 13:25
3F:→ todau:这是javascript最基本的现象,原因就是fillano大所说 10/03 16:19