Почему не срабатывает 2 раз on('click')?

fonbaron

Велосипедист
Добрый день.
Почему при копировании в соседний блок содержимого, кодом приведенным ниже,
PHP:
$('.select ul li a').on('click',function(){
				$(this).parents('.select').siblings('.select:first').html('<ul>'+$(this).parents('li').find('ul').html()+'</ul>');
				return false; 				
			})
он не отлавливает события из блока в который скопировал?
 

shelestov

я тут часто
Я так думаю новое содержимое незабиндено к странице, поэтому обработчик ничего не знает о нем.
 

shelestov

я тут часто
Посмотрите на bind().
Я сам грешен. Досих пор сижу на старой версии jQuery и юзаю live() для этих целей.
В последних версиях jQuery ее похерили.
 

shelestov

я тут часто
Вообще правильней встявлять элементы через .add() или append().
Наверное тогда и забиндится все сразу.
PHP:
$( "li" ).add( "p" ).css( "background-color", "red" );
 

shelestov

я тут часто
.on() навешиваем на документ, а вторым параметром указываем селектор
 

keltanas

marty cats
Навешивать событие на document не лучшим образом сказывается на производительности. Как и селекторы вида `.select ul li a`. Лучше навесить на какой-то более близкий контейнер для элементов, чем документ.
Например, попробуй так:
PHP:
$('.select').on('click', 'a', function(event){});
Если ты не добавляешь динамически div.select, то все будет гуд. Если добавляешь, то навесь событие на контейнер, в котором они находятся.

ЗЫЖ селекторы - это как SQL - в теории все хорошо и красиво и можно строить четырех-этажные условия, а не деле чем проще запросы, тем лучше.
 

WMix

герр M:)ller
Партнер клуба
конечно же delegated events, on просто развернутый api
 
Сверху