Вопрос по jquery. Как запретить один из скриптов при клике
В общем что-то бьюсь в одном месте, уже много чего перепробовал, но не хочет корректно работать.
в общем есть два скрипта. Первый скрипт показывает или скрывает форму сообщения об ошибке. function show_error_descr() { clearTimeout(open_timer); block_click(); $(this).parent().find(".error_descr_block").slideToggle(); if($(this).parent().find(".error_descr_block").attr("show")=="yes") { $(this).parent().find(".error_descr_block").attr("show","no"); } else { $(this).parent().find(".error_descr_block").attr("show","yes"); } } Второй скрипт при клике в любую область экрана - закрывает форму сообщения об ошибке. function hide_error_descr() { clearTimeout(open_timer); block_click(); if($(".error_descr_block").attr("show")=="yes") { $(document).off('click', hide_error_descr); $(".error_descr_block[show=yes]").slideToggle(); $(this).parent().find(".error_descr_block").attr("show","no"); } } Функция block_click() блокирует все обработчики событий на секунду. function block_click(){ $(document).off('click', '.bottom_open', open_full_descr); $(document).off('click', '.good,.bad', add_rating); $(document).off('click', '.show_error_descr',show_error_descr); $(document).off('click', hide_error_descr); open_timer=setTimeout(function(){ $(document).on('click', '.bottom_open', open_full_descr); $(document).on('click', '.good,.bad', add_rating); $(document).on('click', '.show_error_descr',show_error_descr); $(document).on('click', hide_error_descr); },1000); } Проблема в том что при клике на блок .show_error_descr выполняется функция show_error_descr, в начале ее идет блокировка всех обработчиков событий (функция block_click()), но почему-то после выполнения функции show_error_descr сразу же запускается функция hide_error_descr, хотя она была заблокирована функцией block_click на секунду, такое ощущение что при клике сразу запускается обе функции, а надо чтобы сработала только одна первая. Помогите решить задачку :( |
Решилось вообще каким-то тупорыльным способом.
Может есть лучше решение? function block_click(){ $(document).off('click', '.bottom_open', open_full_descr); $(document).off('click', '.good,.bad', add_rating); $(document).off('click', '.show_error_descr',show_error_descr); $(document).off('click', hide_error_descr); open_timer=setTimeout(function(){ $(document).on('click', '.bottom_open', open_full_descr); $(document).on('click', '.good,.bad', add_rating); $(document).on('click', '.show_error_descr',show_error_descr); $(document).on('click', hide_error_descr); },1000); } function hide_error_descr() { clearTimeout(open_timer); block_click(); if($(".error_descr_block").attr("show")=="yes") { $(".error_descr_block[show=yes]").slideToggle(); setTimeout(function(){ $(".error_descr_block").attr("show","no"); },100); } } function show_error_descr() { clearTimeout(open_timer); block_click(); $(this).parent().find(".error_descr_block").slideToggle(); if($(this).parent().find(".error_descr_block").attr("show")=="yes") { var temp=$(this).parent().find(".error_descr_block") $(this).parent().find(".error_descr_block").attr("show","no"); } else { var temp=$(this).parent().find(".error_descr_block") setTimeout(function(){ temp.attr("show","yes"); },100); } } |
Часовой пояс GMT +3, время: 21:01. |