Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.01.2014, 19:15
Аспирант
Отправить личное сообщение для sss2019 Посмотреть профиль Найти все сообщения от sss2019
 
Регистрация: 15.06.2010
Сообщений: 41

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
Ответить с цитированием
  #2 (permalink)  
Старый 03.01.2014, 19:23
Аватар для deivan
Профессор
Отправить личное сообщение для deivan Посмотреть профиль Найти все сообщения от deivan
 
Регистрация: 02.08.2012
Сообщений: 293

setTimeout(DisplaySuccess, 1000);


нужно описывать функцию именно так БЕЗ скобок. В противном случае это будет понято как команда вызова функции
Ответить с цитированием
  #3 (permalink)  
Старый 03.01.2014, 21:55
Аспирант
Отправить личное сообщение для sss2019 Посмотреть профиль Найти все сообщения от sss2019
 
Регистрация: 15.06.2010
Сообщений: 41

Спасибо. Подскажите пожалуйста еще одну вещь. Есть два поля 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
Ответить с цитированием
  #4 (permalink)  
Старый 03.01.2014, 23:02
Аспирант
Отправить личное сообщение для sss2019 Посмотреть профиль Найти все сообщения от sss2019
 
Регистрация: 15.06.2010
Сообщений: 41

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает обработчик window.onload. Alex82 Events/DOM/Window 16 22.02.2013 21:06
Нажатие по дате в календаре срабатывает только со второго клика afr0 Events/DOM/Window 4 31.10.2012 13:39
В IE6 не сразу срабатывает onchange Metallic Events/DOM/Window 3 26.03.2012 14:54
Не сразу срабатывает действие onClick в IE Ant0ni0 Internet Explorer 0 11.01.2012 16:21
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02