javascript - jQuery 单击不适用于动态创建的项目

标签 javascript jquery html

<分区>

我有一段 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

关于javascript - jQuery 单击不适用于动态创建的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484295/

相关文章:

javascript - 在 AngularJS 中更改不同状态的动画

javascript - 用ajax加载后在DOM中找不到元素(想绑定(bind)jquery插件)

javascript - If 和 Else 语句错误

html - 背景图像中的文本溢出

javascript - 融合图表传递用逗号分隔的参数会产生一些错误

html - 网站 "too short"页脚下方有空白怎么办?

javascript - 如何获得最接近的 <li> 来设置 .css 高度

javascript - 在附加元素上触发 CSS 过渡

javascript - 将 vuex 状态和突变绑定(bind)到基于 TypeScript 的 Vue 中的复选框组件属性

jquery - 鼠标事件未在 <div> 内的 <object> 中注册