Вопрос по 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, время: 23:30. |