javascript - 在动态元素上使用 .on() 和 e.stopPropagation()

标签 javascript jquery jquery-events

我一直在尝试使用 stopPropagation() 捕获元素外部的点击事件。

$(".container").children().on('click',function(e){
  e.stopPropagation();    
});
$(".container").on("click",function(){
  alert("outside the box?");    
})​

Here is a jsFiddle set up to demonstrate it functioning .当您点击白框外的任何地方时,应该会触发警报。

现在,我正尝试将相同的原则应用于动态创建的元素。据我所知,jQuery 中事件分配的 on() 方法应该允许它在不更改脚本的情况下运行。

Here is a second jsFiddle您必须首先单击链接以创建元素的位置。完成此操作后,理论上相同的脚本会起作用,但实际上不起作用。这种方法我缺少什么?

最佳答案

当项目被动态添加时,您应该将处理程序附加到最近的肯定会在那里的父级 - 在您的情况下,这是 body。您可以使用 on() this way to achieve a functionalitydelegate()用于提供:

$(selector-for-parent).on(events, selector-for-dynamic-children, handler);

所以你重写的代码将简单地是这样的:

$("body").on('click', '.container', function(e){
    var $target = $(e.target);
    if ($target.hasClass('container')) {
        alert("outside the box!");
    }
});

我用了e.target查找哪个元素实际触发了事件。在这种情况下,我通过检查它是否具有 container 类来识别该项目。

jsFiddle Demo

关于javascript - 在动态元素上使用 .on() 和 e.stopPropagation(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088460/

相关文章:

javascript - 将 PHP 脚本转换为可读取和打印 XML 数据的 JavaScript 脚本

javascript - 如何将 Section wise timer 添加到 Google Forms for a School Quiz?

javascript - 使用 React Native 为数组中的每个对象打印图像

javascript - 为什么我的 HTML 文件找不到我的 javascript 文件?

jQuery UI 未初始化

jquery - 如何在append()中使用jQueryeach()函数

仅限 JQuery 移动样式

javascript - 通过 html 标签实现 onclick 按钮的 js 功能

javascript - 使用 JS/jQuery 组合按键(Escape & Shift +Escape)

javascript - 当导航到某个输入字段时,如何自动生成新的输入字段?