Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Небольшой вопрос по jquery (https://javascript.ru/forum/misc/45513-nebolshojj-vopros-po-jquery.html)

vuler 04.03.2014 00:41

Небольшой вопрос по jquery
 
Добрый день.
Есть код
function cl_open_folder(){
		$(this).next().stop(true,true).slideDown(200);
		if ($(this).hasClass("first_fold")) {
			$(this).find(".cl_img_fol").css("background-position","-20px 0px"); 
			}
			else{
				$(this).find(".cl_img_fol").css("background-position","-20px -18px"); 
			}
		
		$(this).toggleClass("close_folder open_folder");
		}
		
function cl_close_folder(){
	//alert("fdf");
	$(this).next().stop(true,true).slideUp(200);
	if ($(this).hasClass("first_fold")) {
			$(this).find(".cl_img_fol").css("background-position","0px 0px"); 
			}
			else{
				$(this).find(".cl_img_fol").css("background-position","0px -18px"); 
			}
		
		$(this).toggleClass("close_folder open_folder");
	}

$(document).ready(function() {
	$('.close_folder').on("click",cl_open_folder);
	$('.open_folder').on("click",cl_close_folder);
});

При клике на закрытую папку, запускается функция cl_open_folder, после ее выполнения класс объекта меняется на open_folder вместо close_folder. Но 2-й обработчик событий уже не срабатывает при клике на open_folder, вместо этого срабатывает повторно первый. Если вконце функции cl_open_folder дописываю $('.open_folder').on("click",cl_close_folder);, то обработчики начинают включаться одновременно.
Как этого можно избежать? вроде метод on, должен включать в себя live.

рони 04.03.2014 01:38

vuler,
$(function () {
        $(document).on("click", ".close_folder", cl_open_folder)
            .on("click", ".open_folder", cl_close_folder);
    });

danik.js 04.03.2014 01:51

Цитата:

Сообщение от vuler
stop(true,true)

А что делают параметры true?
Цитата:

Сообщение от vuler
background-position

Это надо на css делать.
Можешь вовсе обойтись одним обработчиком. У тебя там только разница в slideUp/slideDown и все. Просто храни состояние в data() либо просто проверяй класс if ($(this).hasClass('close_folder')) {делаем "закрыть папку"}


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