你有两个选择。如果您使用的是 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
时弹出警报的原因。