|
|
|
|
|
для: confirm
(02.05.2013 в 21:37)
| | Спасибо, буду иметь ввиду! :) | |
|
|
|
|
|
|
|
для: ladan
(02.05.2013 в 19:16)
| | Можно, но только в случаях, о которых говорилось выше. Например, при делегировании событий элементами нужно скрыть родителя этих элементов, если источником события не является определенный элемент из этого набора элементов. В этом случае нужно проверять источник. Но если такое действие определено для ряда элементов из их набора, то проверка источника для каждого из набора, это уже плохо. В этом случае нужно иметь ссылки на такие определенные элементы (организовать удобное представление элементов в DOM иерархии всегда можно, а значит и иметь такой список ссылок удобный для обращения по нему).
Задача "исполнить действие, если вне источника" возникает часто. Ваша задача пустяковая, но зачастую такая задача может иметь массу условий. К примеру, страница с товарами, при этом каждый товар можно набирать двумя способами - щелчками по кнопкам +/- и прямым вводом в поле ввода. При любом из способов набора товара где-то рядом с этим "полем боя" должна отображаться информации о сумме набранного в данный момент товара (просчитывается на клиенте, и выводится клиентом). Добавление набранного товара в корзину производится по нажатию на кнопу "Добавить в корзину".
Есть условие - если набран товар и не добавлен в корзину, а происходит переход в поле ввода (поле ввода получает фокус) или щелчок по кнопкам +/-/ "Добавить в корзину" другого товара, то поле предыдущего товара, в котором происходил набор должно быть очищено, а также удалена информация о его набранной сумме.
Вроде бы ничего сверх сложного, но нужно учитывать - различные источники; различные по типу события. Вот в этом случае становится ясно, что необходимо хранить ссылку на текущий источник (поле ввода), проверяя его на событиях потери фокуса. А так как добавление товара по кнопке и непосредственным вводом в поле, это одни и те же задачи, то разные типы событий от поле ввода и кнопок +/-/"Добавить в корзину" нужно делегировать родителю, обрабатывая их одним обработчиком, одновременно выполняя действие "щелкнули вне меня". | |
|
|
|
|
|
|
|
для: ladan
(02.05.2013 в 18:55)
| |
$(function () {
$('body').click(function () {
$('div#fixed').fadeOut('fast');
});
$('div.content').click(function (event) {
event.stopPropagation();
});
});
|
да, тут без параметров все можно было сделать! Спасибо за советы и подсказки!! | |
|
|
|
|
|
|
|
для: Deed
(02.05.2013 в 18:54)
| | Не Laban, а Ladan (отца перепутали), и не придираюсь, а просто не понял к чему это все, потому и написал так. ) | |
|
|
|
|
|
|
|
для: confirm
(02.05.2013 в 14:06)
| | всем спасибо за ответы, пойду разбираться :)
stopPropagation() - не знал этого метода, так теперь все понятно как-такие вещи делать ) | |
|
|
|
|
|
|
|
для: confirm
(02.05.2013 в 18:47)
| | Архив я "прицепил" для наглядной демонстрации примера. Это раз. А, во-вторых, месье Laban эту переменную использует в своем примере, фрагмент которого он привел. Откуда мне знать, что там у него вообще в планах с этим param'oм?
Я заметил, что эта переменная для реализации скрытия 'content' не нужна вообще, как бы вскользь, мимоходом, небрежно так...
Не придирайтесь к мелочам, мэтр! | |
|
|
|
|
|
|
|
для: Deed
(02.05.2013 в 18:35)
| | А к чему тогда вы архив прицепили? Утверждаете одно, приводите другое, да еще прицепом.
Проверка источника, это решение когда требуется скрывать один единственный объект, в противном случае это не удобно. Лучше использовать $.data() для body, в который записывать ссылку на объект, обработчик которого в данный момент обрабатывается.
Body вообще хорошее место "для свалки" ссылок, например для тех же глобальных событий, которые есть в jQuery. | |
|
|
|
|
|
|
|
для: confirm
(02.05.2013 в 18:28)
| | Так я и использовал эту param потому, что она была в вопросе.
Можно вполне обойтись без нее, достаточно проверки условия, что клик был сделан вне "диалога" с id="content":
$(e.target.id)!='content'
|
| |
|
|
|
|
|
|
|
для: Deed
(02.05.2013 в 18:05)
| | Вообще-то вы используете глобальную переменную, утверждая, что можно обойтись без нее.
<script>
function setVar() {
my = 1; //это установка ГЛОБАЛЬНОЙ переменной
}
</script>
<button onclick="setVar()">SET VAR</button>
<button onclick="alert(my)">GET VAR</button>
|
А обойтись без переменных (любых) можно в данном случае, достаточно передать телу список тех объектов, которые должны быть скрыты при при щелчке на нем. | |
|
|
|
|
 852 байт |
|
|
для: яса1
(02.05.2013 в 14:05)
| | Вот архив:
P.S. Вполне можно обойтись без глобальной переменной.
P.P.S. "Закрывающий" клик целесообразнее назначать не "body", a "document". | |
|
|
|
|