Ограничение setTimeout

12
AG
На сайте с 13.10.2014
Offline
44
996

Здравствуйте.

Вопрос заключается в том, как ограничить действие функции setTimeout в пределах функции sendForm ?

А то если у меня в скрипте .print, .noprint встречается в нескольких местах, то он и там срабатывает через 1сек, а нужно что бы через 1сек было только в функции sendForm.

$(document).ready (function () {

$("input.submit-btn").bind("click", sendForm);
});
function sendForm () {
if($("div .sendform").hasClass("send")) {
$(".sendform").animate(animTrHide, animSpeed);
$(".print, .noprint").delay(animSpeed).animate(animTrShow, animSpeed);
}
setTimeout(sendForm, 1000);
}
B
На сайте с 10.03.2016
Offline
4
#1

AlexGr4, Используйте id элементов вместо классов, они уникальны.

И код исправляйте - у Вас бесконечная рекурсия.

AG
На сайте с 13.10.2014
Offline
44
#2

Backuper, в моем случает пришлось отказаться от id совсем. Есть на то причины. В таком случае можно было и классы по всему скрипты разные присвоить, но мне так не подходит.

-------------

Есть решение с return false, и это решение работает как мне надо, но я не могу понять логику его действия, поэтому может есть другие варианты?

B
На сайте с 10.03.2016
Offline
4
#3
AlexGr4:
моем случает пришлось отказаться от id совсем. Есть на то причины. В таком случае можно было и классы по всему скрипты разные присвоить, но мне так не подходит.

Что за секретные такие причины? Id для того и придуманы, что-бы идентифицировать определнный элемент. Можно и классы использовать уникальные, но это решение хуже, чем с Id.

AlexGr4:
Есть решение с return false, и это решение работает как мне надо, но я не могу понять логику его действия,

Так покажите работающий код, а не функцию с ошибкой. Вы думаете на форуме телепаты? :)

AG
На сайте с 13.10.2014
Offline
44
#4

Backuper, код в первом посте. Надо найти решение. Если я говорю что решение с ID и return false мне не подходят, значит на то есть причины. Вам то какая разница какие это причины? =) Если вы не знаете как решить вопрос без применения ID и return false, к чему все эти разговоры? =)

B
На сайте с 10.03.2016
Offline
4
#5

AlexGr4, Вы понимаете вообще, как работает JQuery? Вы используете селектор класса, он выбирает все элементы, которые имеют этот класс.

AlexGr4:
код в первом посте.

Этот код не рабочий. Там серьезнейшая ошибка, на которую я Вам указал.

AG
На сайте с 13.10.2014
Offline
44
#6
Backuper:
AlexGr4, он выбирает все элементы, которые имеют этот класс.

Это все понятно. Поэтому и не работает что у меня классы одинаковые встречаются местами.

Вот поэтому я и говорю как поправит код что бы он работал только в данной функции. Я решил этот вопрос так:

$(document).ready (function () {

$("input.submit-btn").bind("click", sendForm);
});
function sendForm () {
if($("div .form-grp").hasClass("send")) {
$(".sendform").animate(animTrHide, animSpeed);
$(".print, .noprint").delay(animSpeed).animate(animTrShow, animSpeed);
return false;
}
setTimeout(sendForm, 1000);
}

Теперь все работает, но я не понимаю логики, поэтому и спрашиваю как сделать по другому(без ID).

B
На сайте с 10.03.2016
Offline
4
#7

AlexGr4, Этот код так же воздействует на все классы. return false возвращает управление и поэтому setTimeout не вызывается вечно. Но код надо переписывать.

tommy-gung
На сайте с 22.11.2006
Offline
287
#8

а зачем вообще каждую секунду эту функцию запускать?

да и есть же setInterval()

Здесь не могла быть ваша реклама
AG
На сайте с 13.10.2014
Offline
44
#9

tommy-gung, в том то и дело что не нужно запускать каждую секунду. Нужно запустить только по клику по sendForm.

tommy-gung
На сайте с 22.11.2006
Offline
287
#10

AlexGr4, тогда зачем это?

setTimeout(sendForm, 1000);
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий