Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Постоянно работающие функции, Постоянно работающие функции 
:(
    Опции темы
GIK
Дата 8.6.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 6
Всего: 14



Как сделать так чтобы функции вызывали друг друга.
Ситуация следующая: Имеютя два поля для ввода чисел, через оапределенное кол-во времени первое поле увеличивается на значение введенное во втором поле, и так до максимального значения. Как только первое поле получит максимальное значение, оно начнет уменьшатся до значения введенное изночально в первом поле.
ЕЩЕ не знаю как реализовать вызов функциии f1.
Код
<script type="text/javascript">
function f1(obj) 
{var k=(obj.num1.value)*1     //фиксирую первоначальное число
var p  // переменная для вызова функции (больше ни для чего не нужна)
if (k>=100) (obj.num1.value="Введите число менье 100")
else {
var n1=(obj.num1.value)*1    
var n2=(obj.num2.value)*1  
if (n1<=100)            
{obj.num1.value=(n1+n2) //Поле получило новое значение, и n1 получит это значение от поля при повторном вызове функции
setTimeout("f1()", 1000)}
}   
if (n1>100)  
{p="f2(n1,n2,k)"} //Сдесь вызываю функциюf2,и не знаю как вызвать функцию f1 после окончания работы f2}
 }
 function f2(n1,n2,k) //нУЖНО ЛИ ПЕРЕДАТЬ значения переменных n1, n2 и k 
{   var v
    if (n1!=k)
    {obj.num1.value=n1-n2)   //Теперь значение поля уменьшается на еденицу
     n1-=n2                  //Переменная n1 получает новое значение, для сопоставления с условием
    setTimeout("f2()", 1000)}
    else
    (if (n1=k)) 
    {v=n1}     
  return v}    
</script>
</head>
<body>
<form>
Введите число больше не меньше 100: <input type="text" name="num1" value="введите число" onfocus="this.value='';"><br>
<input type="text" name="num2" value="число+2">
<input type="button" value="вычислить" onClick="f1(this.form)"><br>
</form>





--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Sardar
Дата 11.6.2005, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



GIK то что ты написал явно JS не являеться, тем более столько синтаксических и логических ошибок.... smile

О теме: хоть JS как бы являеться мультизадачным языком, в браузере он работает в одном процессе. Другими словами только один код может исполняться в один момент времени. Если ты в какой функции ушёл в бесконечный цикл, то бродилка просто присядет "на попа" и через 30 секунд попросит юзера остановить скрипт.

Избегаеться это простым правилом - никаких бесконечных циклов, всё что хотим выполнить циклически, ставим на setInterval, функция будет работать точно по таймеру пока таймер не остановить.

Смысла твоего кода я не понял, также не понял что есть "максимальное значение". Будем считать что максимальное это машинный предел, тогда:
Код
<script type="text/javascript">
<!--

function start_reken(form) {
  var bt=form.elements.strt;
  if(bt.proc) {
    window.clearInterval(bt.proc);
    bt.value="Запустить вычисление";
    bt.title="Нажмите что бы запустить процесс вычисления";
    bt.proc=null;
  } else {
    bt.value="Вычисление запущенно";
    form.elements.strt.title="Вы можете продолжать работу, процесс автоматически примет новые значения";
    bt.proc=window.setInterval(function(){
      step=1;
      reken(form, parseInt(form.elements.num1.value));
    }, 1000);
  }
}
function reken(f, original) {
  var a, b;
  if(isNaN(a=parseFloat(f.elements.num1.value))||isNaN(b=parseFloat(f.elements.num2.value))) {
    alert("Один из аргументов не число!");
    f.elements.strt.click(); //хмм, не красиво... вызываем клик на кнопке, что бы сработала start_reken...
    return;
  }
  if(step<0) {
    f.elements.num1.value=(a-b);
    if((a-b)<=original) {
      alert("Вернулись к оригинальному значению: "+original);
      f.elements.strt.click();
    }
  } else {
    f.elements.num1.value=(a+b);
    if(Math.round(Number.MAX_VALUE-(a+b))<2) {
      alert("Дошли до максимума: "+Number.MAX_VALUE);
      f.elements.num1.value=Number.MAX_VALUE;
      step=-1;
    }
  }
}
//-->
</script>

<form id="frm">
Введите число не меньше 100: <input type="text" name="num1" value="введите число" onfocus="this.value='';"><br>
<input type="text" name="num2" value="число+2">
<input type="button" name="strt" value="Запустить вычисление" title="Нажмите что бы запустить процесс вычисления" onClick="start_reken(this.form)"><br>
</form>


P.S. Не хилыми JS числами ворочает smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
GIK
Дата 15.6.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 6
Всего: 14



Спасибо за долгожданный ответ. Я уж думал что меня забыли.
Чесно говоря я несовсем все понял в Вашем листинге (не многое еще знаю),
но хочу поделится своим логическим мышлением в своем.
По моему мнению, когда происходит анализ if (n1<=100) и значение поля num1 получает(оставляяет) свое значение + значение поля num2, функция f1 вызывается через некоторое время (за это время, по моему мнению, ничего не происходит, т.е. дальнейшая обработка функции как бы останавливается smile ).
После вызова, значение поля num1 увеличилось и соответственно n1 получил новое значение(var n1=(obj.num1.value)*1), которое еще раз сравнивается в if (n1<=100). Как только n1 станет больше 100, произойдет дальнейшая "обработка" функции, т.е. if (n>100), (число больше 100, есть максимальное число)после чего вызывается вторая функция, которая уменьшает значение поля num1 на тоже число, на которое оно увеливалось,т.е. на значение поля num2 . (получается вызовов функции столько же, сколько у первой) (Единственное немог разобратся как осуществить вызов первой функции по достижении минимального числа "k" которое я зафиксировал в первой функции var k=(obj.num1.value)*1 )
Очень интересующий вопрос: Может ли быть такое, чтобы функция приостонавливала свои действия, перед тем как произойдет повторный вызов. smile

Еще раз спасибо что откликнулись. smile



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.