Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Баг при многократном нажатии (https://javascript.ru/forum/jquery/11659-bag-pri-mnogokratnom-nazhatii.html)

grefon 06.09.2010 11:36

Баг при многократном нажатии
 
Подскажите, пожалуйста, есть ли решение такой проблемы: есть набор действий, который срабатывает при клике по блоку:

$('#kliki').click(function(){
	$('#kliki').css({display:'none'});
	
	$('#block1').animate({left: '500px'}, function() {
		$('#block2').fadeOut(200);
		});

});


При клике по блоку kliki я его скрываю и делаю анимацию для 2 блоков: block1 и block2.
Проблемма заключается в том, что если сделать много кликов подряд по блоку kliki то функция начинает повторяться, столько раз, сколько человек успел кликнуть пока блок kliki не скрылся.
Как это обойти? Пробывал что-то типа такого:

$('#kliki').click(function(){

},{queue : false});


Но к сожалению не помогает. Как правильно заблокировать многократное нажатие?

inGray 06.09.2010 11:56

Не знаю насколько правильное решение, но можно сделать глобальную булеву переменную clicked и проверять её при клике. Если тру, то ничего не делать.:-?

grefon 06.09.2010 11:58

Уже пробовал. Все равно при быстром "клацанье" бывает, что проскакивает лишние нажатие и функция повторяется.

inGray 06.09.2010 12:51

Проверка должна быть первым пунктом в процедуре. т.е.
if (!clicked){
clicked = true;
...
здесь код
...
}

grefon 06.09.2010 13:16

Ура! Получилось! Только перед самим кодом нужно поставить clicked = false; иначе глючит.
inGray, СПАСИБО!

inGray 06.09.2010 13:20

Само собой. Незачто ;)

subzey 06.09.2010 14:12

http://api.jquery.com/one/

inGray 06.09.2010 14:20

one для однократного действия... Если захочется снова нажать, придется заново обработчик вешать....

subzey 06.09.2010 14:24

inGray,
видимо, не так понял :)

тогда можно
if ($("#block1:animated, #block2:animated").size()) return;
(если анимация идет, игнорировать)


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