|
|
|
| Подскажите, плизз... У меня есть банальный счётчик секунд:
var num=7;
function counter(filename)
{
if (num!=0)
{
switch(num){
case 1:
var num_string = num + " секунду.";
break;
case 2:
var num_string = num + " секунды.";;
break;
case 3:
var num_string = num + " секунды.";;
break;
case 4:
var num_string = num + " секунды.";;
break;
case 5:
var num_string = num + " секунд.";;
break;
default:
var num_string = num + " секунд.";;
break;
} // switch
document.getElementById("num").innerHTML=num_string;
num--;
setTimeout(counter,1000);
}
else{
alert("ftp://sve4kin/Download/Video/Films/"+filename);
window.location='ftp://sve4kin/Download/Video/Films/<?echo($film_array['source']);?>';
document.getElementById("download_started").innerHTML = 'Если закачка не началась автоматически, то жмите <A href="ftp://sve4kin/Download/Video/Films/<?echo($film_array['source']);?>" class="a_top_right">здесь</A>.';
}
}
|
Вызывается рекурсивно, всё как обычно. Но у меня есть входная переменная в функцию... Так вот если при рекурсивном вызове её тоже указать, то ничего не работает. А если не указывать то тоже ))) Вот никак не могу сохранить значение этой переменной во внутренних вызовах функции... Как это сделать? Или может можно сделать счётчик без рекурсии? | |
|
|
|
|
|
|
|
для: CBE4KuH
(05.09.2008 в 13:56)
| | Уточню свой вопрос... Начал разбираться и пришёл к такому выводу:
1) Вот не работающий кусок кода:
var num=7;
function counter(filename)
{
var source = filename;
if (num!=0)
{
switch(num){
case 1:
var num_string = num + " секунду.";
break;
case 2:
var num_string = num + " секунды.";;
break;
case 3:
var num_string = num + " секунды.";;
break;
case 4:
var num_string = num + " секунды.";;
break;
case 5:
var num_string = num + " секунд.";;
break;
default:
var num_string = num + " секунд.";;
break;
} // switch
document.getElementById("num").innerHTML=num_string;
num--;
alert(source);
setTimeout('counter(source);',1000);
}
else{
alert("ftp://sve4kin/Download/Video/Films/"+filename);
}
}
|
А вот если при рекурсивном вызове функции задавать не имя переменной а жёстко какую-нибудь строку, то работает (см. код ниже):
var num=7;
function counter(filename)
{
var source = filename;
if (num!=0)
{
switch(num){
case 1:
var num_string = num + " секунду.";
break;
case 2:
var num_string = num + " секунды.";;
break;
case 3:
var num_string = num + " секунды.";;
break;
case 4:
var num_string = num + " секунды.";;
break;
case 5:
var num_string = num + " секунд.";;
break;
default:
var num_string = num + " секунд.";;
break;
} // switch
document.getElementById("num").innerHTML=num_string;
num--;
alert(source);
setTimeout('counter("A vot tak rabotaet");',1000);
}
else{
alert("ftp://sve4kin/Download/Video/Films/"+filename);
}
}
|
| |
|
|
|
|
|
|
|
для: CBE4KuH
(05.09.2008 в 14:35)
| | Итак... Новые подробности проблемы... И становится всё смешнее... Как говорится, всё как в сказке - чем дальше, тем страшнее... ))
Вот новый кусок кода...
var num=7;
function counter(filename)
{
var source = filename;
if (num!=0)
{
switch(num){
case 1:
var num_string = num + " секунду.";
break;
case 2:
var num_string = num + " секунды.";;
break;
case 3:
var num_string = num + " секунды.";;
break;
case 4:
var num_string = num + " секунды.";;
break;
case 5:
var num_string = num + " секунд.";;
break;
default:
var num_string = num + " секунд.";;
break;
} // switch
document.getElementById("num").innerHTML=num_string;
num--;
alert(source);
setTimeout(counter(source), 1000);
}
else{
alert("ftp://sve4kin/Download/Video/Films/"+filename);
}
}
|
Но в этом коде теперь всё работает, но не работает задержка в секунду. Те всё проходит моментально... ))) | |
|
|
|
|
|
|
|
для: CBE4KuH
(05.09.2008 в 15:09)
| |
<head>
<script language="javascript">
var t = 8;
var source = "name.ext";
function counter() {
if (!t) {
clearTimeout('dwn');
alert("ftp://sve4kin/Download/Video/Films/"+source);
} else {
t--;
document.getElementById('num').innerHTML = "Осталось "+ t +" секунд";
dwn = setTimeout("counter()", 1000);
}
}
</script>
</head>
<body onload="counter()">
<div id="num"></div>
</body>
|
| |
|
|
|
|
|
|
|
для: sim5
(05.09.2008 в 15:20)
| | А где входной парметр source? Откуда он его возьмёт? Точнее у Вас он жёстко задан перед функцией, а у меня он передаётся ей в качестве входного параметра, ибо я не знаю какой он именно будет, и соответственно не могу задать его жёстко.. | |
|
|
|
|
|
|
|
для: CBE4KuH
(05.09.2008 в 15:50)
| |
....Video/Films/<?echo($film_array['source']);?>'
|
Это у вас от куда берется? Надо полагать, что вы имя файла на стороне определяете, так не ужели трудно его добавить в любом месте? И если вы выставляете этот таймер то уж ни как не для выбора кучи файлов для него, зачем вам передавать в таком случае аргумент в функцию? Да и вообще, нафига нужен маразм этот со счетчиком, что не хватает прямой ссылки? А если я раздумал закачивать? | |
|
|
|
|
|
|
|
для: sim5
(05.09.2008 в 16:29)
| | Этот кусочек не рабочий. Я просто забыл его удалить... Ладно, с этим вопросом всё ясно. Я просто с другой стороны подошёл к этой проблеме.
У меня возник другой вопрос. Как мне сделать так, чтобы при загрузке страницы браузер брал её не из кэша (если она уже открывалась), а загружал её с сервера снова? | |
|
|
|
|
|
|
|
для: CBE4KuH
(05.09.2008 в 16:56)
| | Для этого существуют метатеги. | |
|
|
|
|
|
|
|
для: CBE4KuH
(05.09.2008 в 16:56)
| | можно чуть компактнее сделать смену окончаний
<div id="t" onclick="alert(t);">подождите .......</div>
<script language="javascript">
var t = -1;
var inv = null;
function tm(sec) {
if (t<0) t=sec;
var word = " секунд"
if (rr = t.toString().match(/([^1]|^)([1234])$/)) word += (rr[2] == 1) ? "а": "ы"
document.getElementById('t').innerHTML = "осталось: "+t+word+"."
if(!t) clearInterval(inv);
--t ;
}
inv = setInterval('tm('+25+')', 1000);
</script>
|
| |
|
|
|