Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: глобальные переменные

Сообщения:  [1-10]   [11-15] 

 
 автор: ladan   (03.05.2013 в 10:45)   письмо автору
 
   для: confirm   (02.05.2013 в 21:37)
 

Спасибо, буду иметь ввиду! :)

  Ответить  
 
 автор: confirm   (02.05.2013 в 21:37)   письмо автору
 
   для: ladan   (02.05.2013 в 19:16)
 

Можно, но только в случаях, о которых говорилось выше. Например, при делегировании событий элементами нужно скрыть родителя этих элементов, если источником события не является определенный элемент из этого набора элементов. В этом случае нужно проверять источник. Но если такое действие определено для ряда элементов из их набора, то проверка источника для каждого из набора, это уже плохо. В этом случае нужно иметь ссылки на такие определенные элементы (организовать удобное представление элементов в DOM иерархии всегда можно, а значит и иметь такой список ссылок удобный для обращения по нему).

Задача "исполнить действие, если вне источника" возникает часто. Ваша задача пустяковая, но зачастую такая задача может иметь массу условий. К примеру, страница с товарами, при этом каждый товар можно набирать двумя способами - щелчками по кнопкам +/- и прямым вводом в поле ввода. При любом из способов набора товара где-то рядом с этим "полем боя" должна отображаться информации о сумме набранного в данный момент товара (просчитывается на клиенте, и выводится клиентом). Добавление набранного товара в корзину производится по нажатию на кнопу "Добавить в корзину".

Есть условие - если набран товар и не добавлен в корзину, а происходит переход в поле ввода (поле ввода получает фокус) или щелчок по кнопкам +/-/ "Добавить в корзину" другого товара, то поле предыдущего товара, в котором происходил набор должно быть очищено, а также удалена информация о его набранной сумме.

Вроде бы ничего сверх сложного, но нужно учитывать - различные источники; различные по типу события. Вот в этом случае становится ясно, что необходимо хранить ссылку на текущий источник (поле ввода), проверяя его на событиях потери фокуса. А так как добавление товара по кнопке и непосредственным вводом в поле, это одни и те же задачи, то разные типы событий от поле ввода и кнопок +/-/"Добавить в корзину" нужно делегировать родителю, обрабатывая их одним обработчиком, одновременно выполняя действие "щелкнули вне меня".

  Ответить  
 
 автор: ladan   (02.05.2013 в 19:16)   письмо автору
 
   для: ladan   (02.05.2013 в 18:55)
 



$(function () {
            
                    
            $('body').click(function () {
                
                   $('div#fixed').fadeOut('fast');
                
                });
                
            
            $('div.content').click(function (event) {
                
                event.stopPropagation();
                
            });    
        
        });



да, тут без параметров все можно было сделать! Спасибо за советы и подсказки!!

  Ответить  
 
 автор: confirm   (02.05.2013 в 19:09)   письмо автору
 
   для: Deed   (02.05.2013 в 18:54)
 

Не Laban, а Ladan (отца перепутали), и не придираюсь, а просто не понял к чему это все, потому и написал так. )

  Ответить  
 
 автор: ladan   (02.05.2013 в 18:55)   письмо автору
 
   для: confirm   (02.05.2013 в 14:06)
 

всем спасибо за ответы, пойду разбираться :)



stopPropagation() - не знал этого метода, так теперь все понятно как-такие вещи делать )

  Ответить  
 
 автор: Deed   (02.05.2013 в 18:54)   письмо автору
 
   для: confirm   (02.05.2013 в 18:47)
 

Архив я "прицепил" для наглядной демонстрации примера. Это раз. А, во-вторых, месье Laban эту переменную использует в своем примере, фрагмент которого он привел. Откуда мне знать, что там у него вообще в планах с этим param'oм?
Я заметил, что эта переменная для реализации скрытия 'content' не нужна вообще, как бы вскользь, мимоходом, небрежно так...
Не придирайтесь к мелочам, мэтр!

  Ответить  
 
 автор: confirm   (02.05.2013 в 18:47)   письмо автору
 
   для: Deed   (02.05.2013 в 18:35)
 

А к чему тогда вы архив прицепили? Утверждаете одно, приводите другое, да еще прицепом.

Проверка источника, это решение когда требуется скрывать один единственный объект, в противном случае это не удобно. Лучше использовать $.data() для body, в который записывать ссылку на объект, обработчик которого в данный момент обрабатывается.
Body вообще хорошее место "для свалки" ссылок, например для тех же глобальных событий, которые есть в jQuery.

  Ответить  
 
 автор: Deed   (02.05.2013 в 18:35)   письмо автору
 
   для: confirm   (02.05.2013 в 18:28)
 

Так я и использовал эту param потому, что она была в вопросе.
Можно вполне обойтись без нее, достаточно проверки условия, что клик был сделан вне "диалога" с id="content":

$(e.target.id)!='content'

  Ответить  
 
 автор: confirm   (02.05.2013 в 18:28)   письмо автору
 
   для: 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>

А обойтись без переменных (любых) можно в данном случае, достаточно передать телу список тех объектов, которые должны быть скрыты при при щелчке на нем.

  Ответить  
 
 автор: Deed   (02.05.2013 в 18:05)   письмо автору
852 байт
 
   для: яса1   (02.05.2013 в 14:05)
 

Вот архив:

P.S. Вполне можно обойтись без глобальной переменной.
P.P.S. "Закрывающий" клик целесообразнее назначать не "body", a "document".

  Ответить  

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования