javascript - JQuery - 如何只对一个元素应用一次函数

标签 javascript jquery html css

假设我有这个:

<div id='container'>
</div>
<input type='button' id='newTest' value='new' />

还有一些 JQuery/JavaScript:

$('#newTest').click( function() {
    var newDiv = "<div class='test'>Click Me</div>";
    $('#container').append(newDiv);
    apply_click();
});

function apply_click() {
    $('.test').click( function() {
        alert('clicked'); 
    });    
}

创建的每个新“测试”div 都应在单击时发出警报...但是每次我们创建一个新的“测试”div 时,.click 函数都会再次应用于所有这些 div,这意味着如果我单击"new" ' 按钮 3 次,然后单击第一个 'Click Me' div,依次弹出 3 个 'clicked' 警报...那么问题是:我怎样才能使 apply_click() 函数仅应用于它尚未应用的元素应用于...?

我在想,如果我让 apply_click() 接受一个引用新创建元素的参数,可能会有一种方法可以做到这一点,但我不确定它是如何工作的。

代码笔:http://codepen.io/anon/pen/rGcwx

最佳答案

每次您创建一个新元素时,您都会将点击事件附加到 $('.test') 选择的所有内容,这是具有该类的每个元素,包括您已经创建的元素已经附加。

为什么不使用事件委托(delegate),这将允许您一次绑定(bind)单个事件处理程序?

$('#container').on('click', '.test', function(e){ ... });

所有对 .test 元素的点击都会冒泡到 #container,您可以在那里处理它们。

关于javascript - JQuery - 如何只对一个元素应用一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167313/

相关文章:

html - 将背景扩展到 100% 的 bootstrap 3 .row

html - 表格单元格被推到下一行

javascript - 使用 HTML/CSS/Javascript 绘制基本形状

jquery - 为什么使用 AjaxSource 和 MVC 的 Datatables 分页只返回一页?

javascript - 从数组中提取随机字符串并插入句子

javascript - 尝试动态加载 API 和 JS 文件

jquery - javascript - 想要使用 ajax 访问另一个域的内容吗?

javascript - 有没有办法告诉页面已经滚动到某个div?

javascript - ckeditor 中的图像上传弹出窗口在 Google Chrome 中不起作用

javascript - 无法使用外部 css 文件删除 Material Ui 表格默认样式