Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   setTimeout срабатывает сразу (https://javascript.ru/forum/misc/44044-settimeout-srabatyvaet-srazu.html)

sss2019 03.01.2014 19:15

setTimeout срабатывает сразу
 
Здравствуйте. Помогите разобраться, в моем коде setTimeout запускается сразу же, без задержки.

function CheckLength(id, max)
{
	var field = document.getElementById(id).value.length;
	var idToDisplay = null;
	var idToHide = null;
	
	if(field > max)
	{
		switch(id)
		{
			case 'name' : { idToDisplay = 'name_error'; idToHide = 'name_success'; break; }
			case 'contacts' : { idToDisplay = 'contacts_error'; idToHide = 'contacts_success'; break; }
		}
		
		document.getElementById(idToDisplay).style.display = 'block';
		document.getElementById(idToHide).style.display = 'none';
	}
	else
	{
		document.getElementById('name_error').style.display = 'none';
		setTimeout(DisplaySuccess(), 1000);
	}
}

function DisplaySuccess()
{
	document.getElementById('name_success').style.display = 'block';
}


CheckLength запускается событием onkeyup

deivan 03.01.2014 19:23

setTimeout(DisplaySuccess, 1000);


нужно описывать функцию именно так БЕЗ скобок. В противном случае это будет понято как команда вызова функции

sss2019 03.01.2014 21:55

Спасибо. Подскажите пожалуйста еще одну вещь. Есть два поля input, я сделал функцию которая отображает блок с ошибкой либо блок который называется success, в зависимости от того сколько символов введено в поле.

Для поля name все работает отлично, но для поля contacts ничего не работает.

<input id="name" class="text" type="text" name="name" onkeyup="CheckLength('name', 200);" />
<input id="contacts" class="text" type="text" name="contacts" onkeyup="CheckLength('contacts', 200);" />


function CheckLength(id, max)
{
	var field = document.getElementById(id).value.length;
	alert(document.getElementById('contacts').value.length);
	
	if(field > max)
	{
		clearTimeout(t);
		
		switch(id)
		{
			case 'name' :
			{
				document.getElementById('name_success').style.display = 'none';
				document.getElementById('name_error').style.display = 'block';
				document.getElementById('name_error').title = 'Превышено максимальное число символов - ' + max + '\nТекущее количество - ' + field; break;
			}
			
			case 'contacts' :
			{
				document.getElementById('contacts_success').style.display = 'none';
				document.getElementById('contacts_error').style.display = 'block';
				document.getElementById('name_error').title = 'Превышено максимальное число символов - ' + max + '\nТекущее количество - ' + field; break;
			}
		}
	}
	
	if(field <= max && field > 0)
	{
		switch(id)
		{
			case 'name' :
			{
				document.getElementById('name_success').style.display = 'block';
				document.getElementById('name_error').style.display = 'none'; break;
			}
			
			case 'contacts' :
			{
				document.getElementById('contacts_success').style.display = 'block';
				document.getElementById('contacts_error').style.display = 'none'; break;
			}
		}
	}
	
	if(field == 0)
	{
		clearTimeout(t);
		
		switch(id)
		{
			case 'name' :
			{
				document.getElementById('name_success').style.display = 'none';
				document.getElementById('name_error').style.display = 'block'; break;
			}
			
			case 'contacts' :
			{
				document.getElementById('contacts_success').style.display = 'none';
				document.getElementById('contacts_error').style.display = 'block'; break;
			}
		}
	}
}


Проверял через alert часть document.getElementById(id).value.length, в случае с name пишет число символов, а в случае с contacts пишет undefined

sss2019 03.01.2014 23:02

Разобрался, был еще li элемент с идом contacts, с ним путался


Часовой пояс GMT +3, время: 19:33.