Вход

Просмотр полной версии : setTimeout срабатывает сразу


sss2019
03.01.2014, 19:15
Здравствуйте. Помогите разобраться, в моем коде 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.displa y = 'none';
setTimeout(DisplaySuccess(), 1000);
}
}

function DisplaySuccess()
{
document.getElementById('name_success').style.disp lay = '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.le ngth);

if(field > max)
{
clearTimeout(t);

switch(id)
{
case 'name' :
{
document.getElementById('name_success').style.disp lay = 'none';
document.getElementById('name_error').style.displa y = 'block';
document.getElementById('name_error').title = 'Превышено максимальное число символов - ' + max + '\nТекущее количество - ' + field; break;
}

case 'contacts' :
{
document.getElementById('contacts_success').style. display = 'none';
document.getElementById('contacts_error').style.di splay = 'block';
document.getElementById('name_error').title = 'Превышено максимальное число символов - ' + max + '\nТекущее количество - ' + field; break;
}
}
}

if(field <= max && field > 0)
{
switch(id)
{
case 'name' :
{
document.getElementById('name_success').style.disp lay = 'block';
document.getElementById('name_error').style.displa y = 'none'; break;
}

case 'contacts' :
{
document.getElementById('contacts_success').style. display = 'block';
document.getElementById('contacts_error').style.di splay = 'none'; break;
}
}
}

if(field == 0)
{
clearTimeout(t);

switch(id)
{
case 'name' :
{
document.getElementById('name_success').style.disp lay = 'none';
document.getElementById('name_error').style.displa y = 'block'; break;
}

case 'contacts' :
{
document.getElementById('contacts_success').style. display = 'none';
document.getElementById('contacts_error').style.di splay = 'block'; break;
}
}
}
}

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

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