2010-05-09 1 views
3

я прямо сейчас этот код:Когда добавляется ли, не становится ли это частью ul «для реального»?

<ul><li class="listitem">text<li></ul> 

JQuery:

$('.listitem').click(function() { 
    $("#elname").text($(this).text()); 
    $('#slists').css('visibility','hidden') 
    $('#elname').css('visibility','visible') 
    $('#elname').css('display','inline-block') 
}); 

Это, как предполагается, чтобы скрыть DIV и это делает, но когда я добавляю детали к ул (с классом ListItem) ничего не происходит с добавленным элементом, класс, который он получает, правильный, название и значение тоже.

Возможно, это связано с тем, что код выше находится в функции готовности документа?

+0

Не могли бы вы прояснить, что вы делаете, и показать фактический код? Где вы добавляете что-то? –

ответ

11

.live() Используйте вместо этого, как это:

$('.listitem').live('click', function() { 
    $("#elname").text($(this).text()) 
       .css({ visibility:'visible', display: 'inline-block' }); 
    $('#slists').css('visibility','hidden') 
}); 

.live() прослушивает на document уровне для вашего клика пузыриться ... и старых и новых элементов пузыря это событие таким же образом, так что это не обратите внимание на то, что было добавлено позже, где, когда ваш обработчик .click() связывает щелчок с элементами, которые существовали во время запуска селектора.

В качестве альтернативы, вы можете дать вашему <ul> идентификатор или класс и использовать .delegate() вроде этого:

$('#myUL').delegate('.listitem', 'click', function() { 
    $("#elname").text($(this).text()) 
       .css({ visibility:'visible', display: 'inline-block' }); 
    $('#slists').css('visibility','hidden') 
}); 

Это приводит к меньшему барботированию, так что просто немного аккуратнее на стороне событий, она захватывает его в <ul> а не на всем пути на document.

+0

спасибо за подробное объяснение! и лучшее кодирование :) !! – Noor

+0

@Noor - Welcome :) Еще один совет, если вам не нужны эти скрытые элементы, чтобы занимать пространство во время скрытия, вы можете использовать 'display' вместо' visibility' и просто вызывать '.show()' и '.hide () 'shortcuts. –

7

События щелчка устанавливаются один раз для всех элементов в DOM во время установки. Добавление элемента списка не приведет к восстановлению этих элементов кликов.

Вам нужно будет использовать jQuery's live event functionality, чтобы создавать события кликов, которые применяются к элементам, созданным на лету.

+0

Спасибо! Поэтому я понял это частично правильно :)! очень хорошее объяснение, и ссылка! – Noor