У вас есть два варианта. Если вы используете jQuery 1.7+, используйте метод .on()
для динамического присоединения обработчика событий:
$(document).on('click','.bb',function() { });
Если вы используете более старую версию jQuery, используйте .delegate()
:
$(document).delegate('.bb','click',function() { });
Хотя в этих примерах используется document
, вы можете использовать любой элемент DOM. Я предлагаю использовать самый низкий из возможных (ближайший предок элементов к .bb
), так как таким образом вы сможете быстрее зафиксировать событие и, при необходимости, предотвратить его распространение на уровне документа. Вы можете слышать о методе .live()
, но он устарел в версии 1.7, и команда jQuery рекомендует прекратить его использование даже в старых проектах.
Ваш пример, опубликованный в комментариях к другому ответу, является прекрасным примером всплытия событий.
<style>
div{width:300px;height:100px;background:pink;margin-bottom:10px;}
.bb{border:10px solid black;}
</style>
<div></div>
<div class="bb"></div>
<script>
$(document).ready(function () }{
$('div').on('click',(function(){
$(this).addClass('bb');
}));
$('body').on('click','.bb',function(){
alert('bb class clicked');
});
});
</script>
В этом примере, когда вы нажимаете на div
без класса bb
, он добавляет класс, затем событие всплывает до body
и срабатывает там, поэтому оповещение появляется сначала. нажмите.
person
saluce
schedule
04.08.2012