Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.10.2016, 20:34
Интересующийся
Отправить личное сообщение для svinin_1989 Посмотреть профиль Найти все сообщения от svinin_1989
 
Регистрация: 03.10.2016
Сообщений: 11

setTimeout не хочет исполнять функцию
Помогите люди добрые. Делаю калькулятор, пытаюсь избавится от кнопки =. Хочу чтоб автоматом считал результат в поле результат.
Кнопочка равно инициализирует
function compute(form) {
	form.result.value = eval(form.display.value)
}


Все работает. Пытаюсь запустить
function compute(form) {
	form.result.value = eval(form.display.value)
}

setTimeout(compute(form), 1000);



Не срабатывает.

Вот страничка вся
<!DOCTYPE HTML>
<html>
<head> </head>
<body>
<font color="RED" size="18"> <B>КАЛЬКУЛЯТОР</B></font> <br/>
<form name="sci-calc">
<table table border="1"  >
<tbody> 
<tr>
<td align="center" style="background-color: red"  ><input type="button" value="1" onclick="addChar(this.form.display, '1')"></td>
<td align="center"  ><input type="button" value="2" onclick="addChar(this.form.display, '2')"></td>
<td align="center"  ><input type="button" value="3" onclick="addChar(this.form.display, '3')"></td>
<td align="center"  ><input type="button" value="4" onclick="addChar(this.form.display, '4')"></td>
<td align="center"  ><input type="button" value="5" onclick="addChar(this.form.display, '5')"></td>
<td align="center"  ><input type="button" value="6" onclick="addChar(this.form.display, '6')"></td>
<td align="center"><input type="button" value="7" onclick="addChar(this.form.display, '7')"></td>
<td align="center"><input type="button" value="8" onclick="addChar(this.form.display, '8')"></td>
<td align="center"><input type="button" value="9" onclick="addChar(this.form.display, '9')"></td>
<td align="center"><input type="button" value="0" onclick="addChar(this.form.display, '0')"></td>
<td align="center"><input type="button" value="." onclick="addChar(this.form.display, '.')"></td>
</tr>
 


<tr>
<td colspan="6" align="center"><input name="display" value="0" size="55" maxlength="55"></td>
<td align="center"><input type="button" value="X" onclick="this.form.display.value = 0 "></td>
<td align="center"  ><input type="button" value="<" onclick="deleteChar(this.form.display)"></td>

<td align="center"><input type="button" value="=" name="enter" onclick="if (checkNum(this.form.display.value)) { compute(this.form) }"></td>

 <td colspan="3" align="center"><input name="result"   size="20" maxlength="20"></td>
<td align="center"><input type="button" value="X" onclick="this.form.result.value = 0 "></td>
<td align="center"  ><input type="button" value="<" onclick="deleteChar(this.form.result)"></td>
<td align="center"><input type="button" value="№" onclick="if (checkNum(this.form.display.value)) { sqrt(this.form) }"></td>
<td align="center"><input type="button" value="^2" onclick="if (checkNum(this.form.display.value)) { square(this.form) }"></td>
<td align="center"><input type="button" value="exp" onclick="if (checkNum(this.form.display.value)) { exp(this.form) }"></td>

</tr>


<tr>
 
<td align="center"><input type="button" value="*" onclick="addChar(this.form.display, '*')"></td>
<td align="center"><input type="button" value="-" onclick="addChar(this.form.display, '-')"></td>
  
<td align="center"><input type="button" value="/" onclick="addChar(this.form.display, '/')"></td>
<td align="center"><input type="button" value="+/-" onclick="changeSign(this.form.display)"></td>
<td align="center"><input type="button" value="+" onclick="addChar(this.form.display, '+')"></td>

 
<td align="center"><input type="button" value="(" onclick="addChar(this.form.display, '(')"></td>
<td align="center"><input type="button" value=")" onclick="addChar(this.form.display, ')')"></td>

<td align="center"><input type="button" value="ln" onclick="if (checkNum(this.form.display.value)) { ln(this.form) }"></td>
 
<td align="center"><input type="button" value="cos" onclick="if (checkNum(this.form.display.value)) { cos(this.form) }"></td>
<td align="center"><input type="button" value="sin" onclick="if (checkNum(this.form.display.value)) { sin(this.form) }"></td>
<td align="center"><input type="button" value="tan" onclick="if (checkNum(this.form.display.value)) { tan(this.form) }"></td>
 </tr>

</tbody></table>
</form>


<script>

function addChar(input, character) {
	if(input.value == null || input.value == "0")
		input.value = character
	else
		input.value += character
}

function cos(form) {
	form.result.value = Math.cos(form.display.value);
}

function sin(form) {
	form.result.value = Math.sin(form.display.value);
}

function tan(form) {
	form.result.value = Math.tan(form.display.value);
}

function sqrt(form) {
	form.result.value = Math.sqrt(form.display.value);
}

function ln(form) {
	form.result.value = Math.log(form.display.value);
}

function exp(form) {
	form.result.value = Math.exp(form.display.value);
}

function deleteChar(input) {
	input.value = input.value.substring(0, input.value.length - 1)
}

function changeSign(input) {
	if(input.value.substring(0, 1) == "-")
		input.value = input.value.substring(1, input.value.length)
	else
		input.value = "-" + input.value
}



 




setTimeout(compute(form), 1000);

function compute(form) {
	form.result.value = eval(form.display.value)
}

function square(form) {
	form.result.value = eval(form.result.value) * eval(form.result.value)
}

function checkNum(str) {
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i+1)
		if (ch < "0" || ch > "9") {
			if (ch != "/" && ch != "*" && ch != "+" && ch != "-" && ch != "."
				&& ch != "(" && ch!= ")") {
				alert("invalid entry!")
				return false
				}
			}
		}
		return true
}

    </script>


</body>
</html>

Последний раз редактировалось svinin_1989, 03.10.2016 в 20:54.
Ответить с цитированием
  #2 (permalink)  
Старый 03.10.2016, 20:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

svinin_1989,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 04.10.2016, 08:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от svinin_1989 Посмотреть сообщение
Пытаюсь запустить
function compute(form) {
	form.result.value = eval(form.display.value)
}
setTimeout(compute(form), 1000);

Не срабатывает.
А так?
setTimeout(function(){
   alert('begin');
   compute(form)
   alert('end');
}, 1000);
Ответить с цитированием
  #4 (permalink)  
Старый 04.10.2016, 08:48
Интересующийся
Отправить личное сообщение для svinin_1989 Посмотреть профиль Найти все сообщения от svinin_1989
 
Регистрация: 03.10.2016
Сообщений: 11

begin выводит, а дальше не работает
Мне тут умный человек подсказал
избавятся от setInterval

Просто передать функцию в обработчик.
Функция исполняется после каждого нажатия цифорки или арифметичекого символа.
Только я чайник совсем, пока не получается

function addChar(input, character) {
	if(input.value == null || input.value == "0")
		input.value = character
 
	else
		input.value += character
			 
}
Ответить с цитированием
  #5 (permalink)  
Старый 04.10.2016, 10:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от svinin_1989
Только я чайник совсем, пока не получается
Как намек...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var tm;
	$('#val').keyup(function(){
		if (tm) {
			clearTimeout(tm);
		};
		tm=setTimeout(calc,1000);
	});
	function calc(){
		var val=$('#val').val();
		$('#txt').text(val);
	};
})
</script>
</head>
<body>
<input type='text' id='val'>
<p id='txt'></p>
</body>
</html>

Суть такая:
- пока идет набор, вычисления не делаются
- если набор завершен, производятся вычисления
Ответить с цитированием
  #6 (permalink)  
Старый 04.10.2016, 11:07
Интересующийся
Отправить личное сообщение для svinin_1989 Посмотреть профиль Найти все сообщения от svinin_1989
 
Регистрация: 03.10.2016
Сообщений: 11

Замечательный конечно код, но не хочется всяких angular плагинов
Слишком много на страничке всяких скриптов, уже ощутимо подтормаживает. Уже подумал, лучше всего мгновенная реакция на набор.
Бьюсь как бы грамотно вставить в
function addChar(input, character) {
	if(input.value == null || input.value == "0")
		input.value = character
 
	else
		input.value += character
		
 
		 
}


функцию
function compute(form) {
 form.result.value = eval(form.display.value)
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширение для Safari. Как вызвать функцию из popover в global page? housewm Opera, Safari и др. 0 21.12.2013 06:07
google Chrome не хочет активировать функцию, а другие активируют top Opera, Safari и др. 0 21.08.2011 13:19
[Closure Compiler] Как запретить инлайнить функцию, которая вызывается из setTimeout? xintrea Events/DOM/Window 4 11.02.2011 16:23
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02