当前位置: 首页 > 面试题库 >

在动态创建的元素上添加事件侦听器

孔瑾瑜
2023-03-14
问题内容

是否可以向所有动态生成的元素添加事件侦听器(Javascript)?我不是页面的所有者,因此无法以静态方式添加侦听器。

对于页面加载时创建的所有元素,我使用:

doc.body.addEventListener('click', function(e){
//my code
},true);

当页面上出现新元素时,我需要一种方法来调用此代码,但是我无法使用jQuery(在项目中无法使用elegate,on等)。我怎样才能做到这一点?


问题答案:

听起来您需要执行委派策略而又不退回图书馆。我在此处的小提琴中发布了一些示例代码:

要点是使用对象target上的event来查找您感兴趣的元素,并做出相应的响应。就像是:

document.querySelector('body').addEventListener('click', function(event) {
  if (event.target.tagName.toLowerCase() === 'li') {
    // do your action on your 'li' or whatever it is you're listening for
  }
});

小心! 示例Fiddle仅包含用于符合标准的浏览器的代码(即IE9+,以及几乎每个其他版本的代码)。如果您需要支持“旧IE”attachEvent,则还需要围绕该浏览器提供自己的自定义包装适当的本机功能。



 类似资料:
  • 将事件侦听器添加到可以使用事件委派的元素。 使用 EventTarget.addEventListener() 将一个事件监听器添加到一个元素。 如果提供了 选项对象(opts) 的 target 属性,确保事件目标匹配指定的目标元素,然后通过提供正确的 this 上下文来调用回调。 返回一个对自定义委派函数的引用,以便与 off 一起使用。 忽略 opts ,则默认为非委派行为,并且事件冒泡。

  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 我可以在下面的代码中为添加事件侦听器,但不能添加到。 是不是因为twitter做了一些事情不让我这么做?有办法绕过它吗?

  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 我有一些代码,在其中循环浏览页面上的所有选择框,并将事件绑定到它们上,以使它们的宽度变窄。 这在页面准备就绪时发生,并且工作正常。 我的问题是,在初始循环之后,我通过Ajax或DOM添加的所有选择框都没有事件绑定。 我已经找到了这个插件([jQuery Live Query Plugin](),但是在

  • 问题内容: 我有一个删除ID的列表视图。我想为具有特定类的所有元素添加一个侦听器,并发出确认警报。 我的问题是,这似乎只会将侦听器添加到它找到的类的第一个元素。我尝试使用,但是没有用。 清单: 问题答案: 您应该使用。它返回NodeList,但是仅返回找到的第一个元素: 然后,您将循环: 另外,只有在时,您才应该阻止Default 。 还值得注意的是,此方法仅对与绑定的事件处理程序有用。对于你应该

  • 问题:我正在尝试为我的应用程序创建一个组件,其他组件将使用该组件渲染表。它可能有三个可能的单元格值: 文本 HTML 组成部分 我能够呈现上面所有的值,但是我在绑定侦听器时遇到了困难。我试图实现的是这样的:传递一个要绑定到组件的方法和事件,表应该将其绑定到相应的单元格。例如: 表JSON 表组件 上面只是我正在尝试的一个片段,表循环通过传递的对象并相应地呈现。 我已经试过了 因此,解决方案1 因此