Небольшой вопрос по 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, время: 23:19. |