То, как вы это делаете, с setTimeout
внутри цикла for
, вы фактически создаете десять отдельных таймаутов, которые будут срабатывать примерно в одно и то же время, через 5 секунд после нажатия кнопки.
Вам нужно создать каждый новый тайм-аут только после срабатывания предыдущего:
function xultestRunTest2(times) {
if(times > 0){
document.getElementById("xultest-text").value =
document.getElementById("xultest-text").value + "X";
setTimeout(function(){ xultestRunTest2(times-1); }, 5000);
}
}
...
<toolbarbutton oncommand="xultestRunTest2(10);" label="xultest runtest" />
или (это мой любимый метод из трех):
function xultestRunTest2() {
var times = 10;
function do_cycle(){
var el = document.getElementById("xultest-text");
if(times > 0){
el.value = el.value + "X";
setTimeout(do_cycle, 5000);
--times;
}
};
do_cycle();
}
Вы также можете использовать setInterval()
вместо:
function xultestRunTest2() {
var times = 10,
intervalId;
intervalId = setInterval(function(){
if(times > 0){
document.getElementById("xultest-text").value =
document.getElementById("xultest-text").value + "X";
--times;
}
else {
clearInterval(intervalId);
intervalId = null;
}
}, 5000);
}