Закрытие формы на «размытие» - есть ли лучший способ? - PullRequest
1 голос
/ 02 декабря 2010

Итак, я пытаюсь закрыть форму на размытие, например, комментарии в Facebook.Проблема в том, что у меня было:

$(window).click(function(){ $('.comment_form').hide(); });
$('.comment_form').click(function(){ return false; });

, которое работало нормально, однако, добавив, что return false, он отменяет кнопку отправки при нажатии, когда я на самом деле пошел, чтобы запустить его.

Я думал, что вместо этого это будет работать логически:

$('*:not(.comment_form,.comment_form *)').click(function(eve)
{
    $('.comment_form').hide();
});

Но, к сожалению, это не так, и я предполагаю, что это потому, что когда я нажимаю, скажем, .comment_form, я на самом деле нажимаю body, div, div ... и т. Д., Так что он фактически скрывает это несколько раз.

Моя работа была окончательно

$('*').click(function(eve)
{
    if(!$(eve.target).is('.comment_form,.comment_form *'))
    {
        $('.comment_form').hide();
    }
});

Однако я не уверенМне нравится это, и именно поэтому я спрашиваю.Это вызовет событие клика каждый клик .

У кого-нибудь есть предложения?

1 Ответ

1 голос
/ 02 декабря 2010

Ваше решение находится на правильном пути, но может быть разумнее прикрепить событие к document вместо всех элементов (*):

$(document).click(function(eve) {
    if (!$(eve.target).is('.comment_form, .comment_form *')) {
        $('.comment_form').hide();
    }
});
...