Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Снова вернуть обработчик, on(), off() (https://javascript.ru/forum/jquery/30669-snova-vernut-obrabotchik-off.html)

Deliaz 11.08.2012 18:15

Снова вернуть обработчик, on(), off()
 
Привет!
Не могу сообразить, как придумать краткое решение проблемы.
Суть: есть элемент, на него повешен обработчик, который должен работать с самого начала.
По клику на .n1 должно произойти единожды событие mouseenter, и обработчик надо снять.
Обработчик возвращается вновь, по клику на .n2.

Грубая модель ситуации: Есть переключатель, который включает или выключает анимацию на сайте. Если анимация отключается, то все занимает "отработанное" положение. Если тут же ее включают, все возвращается к исходным положениям.

Думал над решениями, но какие-то длинные, хочу лаконично.

Фрагмент кода
$(".cblocks").on({
	mouseenter:
		function() {
		// код...
	},
	mouseleave: 
		function () {
		//еще код...
	}
});


$(".n1").click(function() {
	$(".cblocks").trigger("mouseenter");
	$(".cblocks").off();
});
	
$(".n2").click(function() {
	$(".cblocks").trigger("mouseleave");
	//как вернуть ? :(
});


С событиями работаю первый раз, поэтому возникают трудности.
Спасибо (:

Deff 11.08.2012 18:26

Цитата:

Сообщение от Deliaz
По клику на .n1 должно произойти единожды событие mouseenter,

http://jquery-docs.ru/Events/one/#typedatafn

Deliaz 11.08.2012 18:50

Цитата:

Сообщение от Deff (Сообщение 196692)

Не совсем стыкуется с моей моделью.
Я может запутал словом "единожды". Имел ввиду что при клике на .n1 (отключение анимации) элементы выполнять действия как в mouseenter, и застынут. И не будут обрабатывать ни маусэнтер ни мауслив. Но как только клик на .n2 (включение анимации) - все работает снова.

Deff 11.08.2012 18:53

Deliaz,
Тады on и unbind http://jquery-docs.ru/Events/unbind/#typefn

(Для старых версий ниже 1.7.2 был еще и bind - установщик
в новой всё ставицо через on

Deliaz 11.08.2012 19:23

Цитата:

Сообщение от Deff (Сообщение 196697)
Deliaz,
Тады on и unbind http://jquery-docs.ru/Events/unbind/#typefn

(Для старых версий ниже 1.7.2 был еще и bind - установщик
в новой всё ставицо через on

Сделал. Работает.
$(".cblocks").on({mouseenter:ShowIt,mouseleave:HideIt});

	$(".n1").click(function() {
		$(".cblocks").trigger("mouseenter");
		$(".cblocks").off();
	});
	
	$(".n2").click(function() {
		$(".cblocks").on({mouseenter:ShowIt,mouseleave:HideIt});
		$(".cblocks").trigger("mouseleave");
	});


Функции ессно описаны.
Это действительно оптимальный код? А то концентрация индусских решений у меня уже превышена, стоит бы оптимизировать..


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