Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.03.2014, 00:41
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

Небольшой вопрос по 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.
Ответить с цитированием
  #2 (permalink)  
Старый 04.03.2014, 01:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

vuler,
$(function () {
        $(document).on("click", ".close_folder", cl_open_folder)
            .on("click", ".open_folder", cl_close_folder);
    });
Ответить с цитированием
  #3 (permalink)  
Старый 04.03.2014, 01:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от vuler
stop(true,true)
А что делают параметры true?
Сообщение от vuler
background-position
Это надо на css делать.
Можешь вовсе обойтись одним обработчиком. У тебя там только разница в slideUp/slideDown и все. Просто храни состояние в data() либо просто проверяй класс if ($(this).hasClass('close_folder')) {делаем "закрыть папку"}
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по селекторам в jquery LeBron jQuery 3 29.02.2012 15:59
нубыский вопрос по Jquery vuler Общие вопросы Javascript 1 24.02.2012 16:45
Простой вопрос по jquery Grienders jQuery 1 28.01.2010 14:52
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
Как правильно подгрузить jQuery Siton jQuery 4 15.06.2009 09:54