我有一段 jQuery 循环遍历给定 div(#container
)中的每个元素,并在每次单击跨度时发出 javascript 警报。如果 <span>
这很好用是静态的。
但是,如果我使用如下代码:
$(someLink).click(function(){
$("#container").html( <new html with new spans> )
});
jQuery 代码没有触发。奇怪的是
我的问题是:是否存在我的 Click 事件不适用于动态创建的项目的原因?我想我必须在我的文档准备好或心跳脚本(每 100 毫秒触发一次)中添加一些东西来连接事件??
这样做:
$( '#wrapper' ).on( 'click', 'a', function () { ... });
其中 #wrapper
是一个静态元素,您可以在其中添加动态链接。
因此,您有一个硬编码到 HTML 源代码中的包装器:
<div id="wrapper"></div>
然后用动态内容填充它。这个想法是将事件委托(delegate)给该包装器,而不是直接在动态元素上绑定(bind)处理程序。
顺便说一句,我推荐Backbone.js - 它为这个过程提供了结构:
var YourThing = Backbone.View.extend({
// the static wrapper (the root for event delegation)
el: $( '#wrapper' ),
// event bindings are defined here
events: {
'click a': 'anchorClicked'
},
// your DOM event handlers
anchorClicked: function () {
// handle click event
}
});
new YourThing; // initializing your thing