Исключить элемент из обработчика события

Если Вы совсем новичок и слабо представляете себе возможности jQuery, не можете понять в каком форуме задать свой вопрос - Вам сюда.

Модераторы: TRAHOMOTO, tuareg, Gennady

Исключить элемент из обработчика события

Сообщение Cuprum » 17 авг 2010, 21:29

Пусть в документе имеется некая форма. По клику в любом месте страницы ее необходимо скрывать (исключая клик на самой форме и ее составляющих)
Код: выделить все
$('body').bind('click', function (e){
   if (e.target.id != 'form')         
      $('#form').hide();
});

Загвоздка - если клик происходит на каком-то дочернем элементе формы (поле, кнопка), форма исчезает. Понятно почему - у поля или кнопки ID не "form".
Подскажите пожалуйста, как исключить форму в целом из обработчика события, чтобы клик на форме и ее дочерних элементах не приводил к скрытию формы?
Cuprum
 
Сообщений: 16
Зарегистрирован: 17 авг 2010, 21:06

Re: Исключить элемент из обработчика события

Сообщение Gennady » 17 авг 2010, 22:49

Существует метод .not(), который позволяет убирать некоторые элементы из первоначального набора.
P.S. Вешать обработчики на body, не есть хорошая практика, имхо...
Долог путь поучения, короток и успешен путь примеров (Сенека).
I'm a member of jQuery Meetups. jQuery users unite! Connect with other jQuery users... Присоединиться к jQuery Russia.
Аватар пользователя
Gennady
Администратор
 
Сообщений: 1886
Зарегистрирован: 14 янв 2010, 14:36
Откуда: Москва

Re: Исключить элемент из обработчика события

Сообщение Cuprum » 19 авг 2010, 20:23

Насколько я понял, обернутый набор в данном случае ($('body')) - это массив в котором один элемент DOM - body. Как-то не очень представляю как тут может помочь метод .not(). По идее, в обработчике надо получить все дочерние элементы body и исключить из них форму со всеми ее потомками. Это можно как-то сделать? Или может у кого есть еще идеи?
А по поводу "вешать обработчики на body" - а как еще можно записать "клик в любом месте страницы"?
Cuprum
 
Сообщений: 16
Зарегистрирован: 17 авг 2010, 21:06

Re: Исключить элемент из обработчика события

Сообщение Gennady » 20 авг 2010, 00:05

Я к тому, что лучше бы выбирать элементы не трогая body и при необходимости использовать .not(selector), чтобы исключить из набора ненужный элемент(ы). Ну, на крайний случай можно сделать что-то вроде этого:
Код: выделить все
$("*").click(function(event){
   event.stopPropagation();
   // но здесь все равно не обойтись без дополнительных проверок
   // на основании какого-либо атрибута элемента, например id
});

Посмотреть, для чего используется event.stopPropagation() можно на http://javascript.ru/tutorial/events/timing
Долог путь поучения, короток и успешен путь примеров (Сенека).
I'm a member of jQuery Meetups. jQuery users unite! Connect with other jQuery users... Присоединиться к jQuery Russia.
Аватар пользователя
Gennady
Администратор
 
Сообщений: 1886
Зарегистрирован: 14 янв 2010, 14:36
Откуда: Москва


Вернуться в Вопросы от совсем новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 4

cron