Небольшой вопрос по 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. |
vuler,
$(function () {
$(document).on("click", ".close_folder", cl_open_folder)
.on("click", ".open_folder", cl_close_folder);
});
|
Цитата:
Цитата:
Можешь вовсе обойтись одним обработчиком. У тебя там только разница в slideUp/slideDown и все. Просто храни состояние в data() либо просто проверяй класс if ($(this).hasClass('close_folder')) {делаем "закрыть папку"} |
| Часовой пояс GMT +3, время: 11:11. |