Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отсчёт секунд.
 
 автор: CBE4KuH   (05.09.2008 в 13:56)   письмо автору
 
 

Подскажите, плизз... У меня есть банальный счётчик секунд:

        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 в 14:35)   письмо автору
 
   для: 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 в 15:09)   письмо автору
 
   для: 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); 
            } 
        }


Но в этом коде теперь всё работает, но не работает задержка в секунду. Те всё проходит моментально... )))

  Ответить  
 
 автор: sim5   (05.09.2008 в 15:20)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: CBE4KuH   (05.09.2008 в 15:50)   письмо автору
 
   для: sim5   (05.09.2008 в 15:20)
 

А где входной парметр source? Откуда он его возьмёт? Точнее у Вас он жёстко задан перед функцией, а у меня он передаётся ей в качестве входного параметра, ибо я не знаю какой он именно будет, и соответственно не могу задать его жёстко..

  Ответить  
 
 автор: sim5   (05.09.2008 в 16:29)   письмо автору
 
   для: CBE4KuH   (05.09.2008 в 15:50)
 

....Video/Films/<?echo($film_array['source']);?>'

Это у вас от куда берется? Надо полагать, что вы имя файла на стороне определяете, так не ужели трудно его добавить в любом месте? И если вы выставляете этот таймер то уж ни как не для выбора кучи файлов для него, зачем вам передавать в таком случае аргумент в функцию? Да и вообще, нафига нужен маразм этот со счетчиком, что не хватает прямой ссылки? А если я раздумал закачивать?

  Ответить  
 
 автор: CBE4KuH   (05.09.2008 в 16:56)   письмо автору
 
   для: sim5   (05.09.2008 в 16:29)
 

Этот кусочек не рабочий. Я просто забыл его удалить... Ладно, с этим вопросом всё ясно. Я просто с другой стороны подошёл к этой проблеме.

У меня возник другой вопрос. Как мне сделать так, чтобы при загрузке страницы браузер брал её не из кэша (если она уже открывалась), а загружал её с сервера снова?

  Ответить  
 
 автор: sim5   (05.09.2008 в 17:39)   письмо автору
 
   для: CBE4KuH   (05.09.2008 в 16:56)
 

Для этого существуют метатеги.

  Ответить  
 
 автор: xx77   (05.09.2008 в 22:01)   письмо автору
 
   для: 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>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования