Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Метод live() jquery
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Метод live() jquery

Страниц (2): [1] 2 »
 

1. Еугений - 21 Июля, 2012 - 19:05:58 - перейти к сообщению
Всем привет. Перехожу с jquery на javascript, и мне стало интересно как работает метод live(), который присоединяет к указаному элементу обработчик, которые будет работать даже в том случае, если тот элемент будет загружен через ajax. Кое-где статью прочитал, но увы, не понял. Хотелось бы узнать, как такое реализовать на javascript
2. DlTA - 21 Июля, 2012 - 19:06:52 - перейти к сообщению
Еугений пишет:
Перехожу с jquery на javascript
че вдруг?
3. Еугений - 21 Июля, 2012 - 19:09:20 - перейти к сообщению
DlTA пишет:
Еугений пишет:
Перехожу с jquery на javascript
че вдруг?
ну хотя бы например зачем подключать 100кб библиотеку ради нескольких строчек скрипта
4. tuareg - 21 Июля, 2012 - 19:28:18 - перейти к сообщению
Еугений пишет:
ну хотя бы например зачем подключать 100кб библиотеку ради нескольких строчек скрипта

Так-то всего 32.9 KB. А по теме он вешает обработчик на document. И отлавливает всплытие события. Кстати вот поэтому его и не рекомендуется использовать.
5. Еугений - 21 Июля, 2012 - 19:33:30 - перейти к сообщению
tuareg пишет:
Еугений пишет:
ну хотя бы например зачем подключать 100кб библиотеку ради нескольких строчек скрипта

Так-то всего 32.9 KB. А по теме он вешает обработчик на document. И отлавливает всплытие события. Кстати вот поэтому его и не рекомендуется использовать.
сжатая jquery 1.7 весит 92 кбУлыбка и можно чуть поподробнее насчет "вешает на document"?
6. tuareg - 21 Июля, 2012 - 19:45:31 - перейти к сообщению
Может fierbug и лжет, тогда это на его совести он показывает 32.9 с CDN google.(может google ссу...., что-то наделал не знаю)
Еугений пишет:
поподробнее насчет "вешает на document"

Я если честно вообще не знаю как вешаются кросбраузерно события в чистом js Радость (мне никогда это было не интересно.)
А так основа вот [url]http://jsfiddle.net/tuareg/3rsT6/1/​[/url]
Естественно там создается какой-то объект, в котором хранится элемент на который событие повешено и т.д
ИМХО
Еугений пишет:
Перехожу с jquery на javascript,
шкурка выделки не стоит. Лучше дождитесь 1.8 там они обещают модульность
7. Еугений - 21 Июля, 2012 - 19:50:10 - перейти к сообщению
tuareg пишет:
Естественно там создается какой-то объект, в котором хранится элемент на который событие повешено

понятно, спасибо, об этом я как то и подумывал..
8. tuareg - 21 Июля, 2012 - 19:51:45 - перейти к сообщению
Можно вообще глянуть. Был плагин live.js Посмотрите как он работал.
9. SAD - 21 Июля, 2012 - 19:55:06 - перейти к сообщению
32.9 - весит, если пожат gzip
10. tuareg - 21 Июля, 2012 - 19:56:23 - перейти к сообщению
SAD пишет:
32.9 - весит, если пожат gzip
Я об этом не подумал. Тогда тем более.
11. Еугений - 21 Июля, 2012 - 20:03:31 - перейти к сообщению
Еугений пишет:
tuareg пишет:
Естественно там создается какой-то объект, в котором хранится элемент на который событие повешено

понятно, спасибо, об этом я как то и подумывал..

Если я, например, в live указал событие click, то это значит при клике на любой элемент в документе будет срабатывать этот обработчик,а выполнятся будет только на том элементе, который указан?
12. tuareg - 21 Июля, 2012 - 20:20:46 - перейти к сообщению
Еугений Вы не обижайтесь только, но Вы уверены, что Вам это по плечу?
Прочитайте про всплытие события.
Если я правильно понимаю, происходит следующее.
1 Объявляем $('...').live('click',function(){
//....
});
На документ вешается событие click() если его еще нет. В какой-то объект записывается элемент $('...'), событие click() и function().
2 При клике событие всплыло. И идет проверка по e.target . Если они совпали e.target===$(...) вызывается function()
То что я описал, это только я так думаю. Объект скорей всего hash массив
Цитата:
Если я, например, в live указал событие click, то это значит при клике на любой элемент в документе будет срабатывать этот обработчик,а выполнятся будет только на том элементе, который указан?

Да
13. LIME - 21 Июля, 2012 - 22:01:28 - перейти к сообщению
сколько бы ни весило грузится только первый раз
потом из кэша браузера
14. IllusionMH - 21 Июля, 2012 - 22:31:52 - перейти к сообщению

LIME пишет:
сколько бы ни весило грузится только первый раз
потом из кэша браузера

А если jQuery подгружать с googleapis или яндекса, то вполне вероятно, что этот файл уже будет в кэше Улыбка
15. LIME - 21 Июля, 2012 - 22:34:09 - перейти к сообщению
нифига
тоже так думал
мало кто грузит оттуда на практике

 

Powered by ExBB FM 1.0 RC1