当前和未来元素的事件侦听器,无需 jQuery [重复]

2023-11-26

如果我没记错的话,我曾经看到一种将事件侦听器绑定到匹配特定条件的每个元素(可能是查询选择器)的方法。再次寻找它,除了高度依赖 jQuery 的人之外,我找不到任何东西,但我更喜欢一种真正简单的方法来实现这一点。

有人知道这个方法叫什么吗?


我编写了一个更通用的函数,它接受一个选择器、事件类型和一个处理函数,类似于 jQuery 的on功能:

/** adds a live event handler akin to jQuery's on() */
function addLiveEventListeners(selector, event, handler){
    document.querySelector("body").addEventListener(
         event
        ,function(evt){
            var target = evt.target;
            while (target != null){
                var isMatch = target.matches(selector);
                if (isMatch){
                    handler(evt);
                    return;
                }
                target = target.parentElement;
            }
        }
        ,true
    );
}

例如,对 div 的任何点击都会调用以下命令,即使它是稍后添加到 DOM 中的:

addLiveEventListeners("div", "click", function(evt){ console.log(evt); });

这适用于所有现代浏览器和 Microsoft Edge。使其在 IE9 中工作 - IE11 测试target.matches(selector)应该像这样修改:

var isMatch = target.matches ? target.matches(selector) : target.msMatchesSelector(selector);

然后测试if (isMatch)也适用于这些浏览器。

另请参阅我的回答向多个元素添加事件监听器它将事件侦听器添加到元素本身而不是body.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当前和未来元素的事件侦听器,无需 jQuery [重复] 的相关文章

  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • 三个JS,给纹理添加镜面反射(光泽)

    我有一个纹理应用于 Three js 中的对象 我想为其添加一些镜面反射或光泽 我看到这样的例子 new THREE MeshPhongMaterial color 0x996633 specular 0x050505 shininess
  • 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

    我有一个用普通 JavaScript 编写的 Web 应用程序 我想用 jQuery 动画来增强它 并使用我在各种 jQuery 插件中找到的一些功能 例如上传 http www uploadify com 可以通过什么方式将 jQuery
  • 在有限的上下文中运行 JS 代码

    我正在尝试奔跑trusted 隔离 上下文中的 JS 代码 基本上想出了这个方法 function limitedEval src context return function with this return eval src call
  • JavaScript 字符串中的脚本标签[重复]

    这个问题在这里已经有答案了 我遇到一个问题 即 JavaScript 中带引号的字符串内有结束脚本标记 并且它正在杀死脚本 我认为这不是预期的行为 可以在这里看到这样的示例 http jsbin com oqepe edit http js
  • 在上传之前预览图像 VUEjs [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但我不知道如何在vuejs中使用代码 我尝试了很多但没有任何结果 我还添加了我的代码 有人可以帮帮我吗 这是我的代码 谢谢 html
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • jquery 中的函数返回未定义[重复]

    这个问题在这里已经有答案了 我在 jquery 中调用的函数返回未定义 我检查了该函数 当我对其进行调试时 它返回正确的数据 function addToPlaylist component type add to pl value pl
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • Svelte 条件元素类报告为语法错误

    我正在做一个if块每if 块的精简指南 https svelte technology guide if blocks 这看起来很简单 但 Svelte 认为这是一个语法错误 svelte plugin ParseError Unexpec
  • 为什么 call 比 apply 快那么多?

    我想知道是否有人知道why call比apply 在 Chrome 中 速度大约快 4 倍 在 Firefox 中快 30 倍 我什至可以制作自定义原型 apply2 在大多数情况下 运行速度是apply 这个想法取自角度 Function
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • Google 地图 API - 地图未显示 - 没有错误

    我正在尝试将地图从 Google API 加载到 div 中 但是 地图未加载 并且没有输出任何错误 这是代码 google maps var geocoder map function codeAddress address geocod
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单

随机推荐

  • 创建一个ostream

    出于教育原因 我正在尝试创建一个 C ostream 我的测试将创建一个 ostream 其行为类似于 ofstream 只不过它不是写入文件 而是写入双端队列或向量容器 正如您所说 因为这是为了教育 我将向您展示我将如何做这样的事情 否则
  • hibernate不创建表但没有错误消息

    我正在做一个 spring boot 项目并尝试使用 hibernate 创建一个表 当我运行应用程序并且服务器正常启动时没有收到错误 但该表没有创建 状态更新 java package model import java util Dat
  • android:如何更改ListPreference标题颜色?

    我想将 ListPreference 的标题和线条颜色从蓝色更改为粉红色 以匹配操作栏的线条 有任何想法吗 提前致谢 我一直在浏览 Android 的themes xml and styles xml看着像这样的东西dialogPrefer
  • 有没有办法找到文件对象的缓冲区大小

    我正在尝试 映射 一个非常大的 ascii 文件 基本上 我会读取行 直到找到某个标签 然后我想知道该标签的位置 以便稍后再次查找它以提取相关数据 from itertools import dropwhile with open data
  • 使用扩展字符串作为 Powershell 函数参数

    我正在尝试编写一个函数 该函数将打印用户提供的问候语并发送给用户提供的名称 我想在这个代码块中使用扩展字符串 Name World Greeting Hello Name Greeting 哪个成功打印Hello World 但是 当我尝试
  • 如何在 facebook graph api 请求中使用 cURL

    我正在使用 file get contents 获取 facebook graph api 的信息 但有时我会收到错误 我发现必须使用 cURL 而不是 file get contents 问题是 我不知道如何将 cURL 与我需要传递的
  • JavaScript ES5 数组函数。 forEach 第二个“此值”参数

    我是 JavaScript 新手 我面临以下问题 就像声明的那样here 几乎所有 ES5 数组函数 forEach map filter every some 都可以接受额外的第二个参数 如果指定了该函数 则将其视为第二个参数的方法来调用
  • Rails3:更改临时(tmp)目录的位置

    我通常在本地 Dropbox 文件夹中进行开发 tmp 文件夹中的某些文件会被浏览器锁定 并使 Dropbox 保持忙碌 Growl 会引发异常等等 因此 我正在寻找一个配置设置 将 tmp 文件夹放在 Rails app 包之外 那可能吗
  • 如何缓存较大的文件以供开发

    我正在使用 workbox 但收到以下错误 Skipping file app js due to size Max size supported is 2097152 this file is 4760833 我理解为什么它会在生产中执行
  • 火狐浏览器添加

    编辑 由于 ajax 调用 这不会发生 为了好玩 我将其更改为使用 TinyMCE 组件中的值 并且得到了同样的结果 content tinyMCE get cComponent getContent content at this poi
  • 选择以类结尾的 div

    像这个 div class abc foo something 我该如何选择div课程结束于 something Einacio 评论正确 div class something 不会为 div class foo something ab
  • 将两个音频缓冲区叠加到一个缓冲区源中

    尝试将两个缓冲区合并为一个 我已经能够从音频文件创建两个缓冲区并加载和播放它们 现在我需要将两个缓冲区合并为一个缓冲区 他们怎样才能合并 context new webkitAudioContext bufferLoader new Buf
  • session_regenerate_id() 与 session_id(randomString)

    之间有什么明显的区别session id randomString and session regenerate id 两者似乎都改变了会话ID session regenerate id 将用新的会话 ID 替换当前的会话 ID 并保留当
  • 如何配置 IIS 来处理非常大的文件上传?

    平台 IIS 6 ASP Net 2 0 Net 3 5 Server 2003 我正在构建一个应用程序 它接受用户的文件 处理它们并返回结果 该文件使用 HTTP POST 上传到 ASP Net Web 表单 该应用程序需要一些大文件
  • PHP 没有看到 mysql 扩展

    我不知所措 我使用的是 WIndows 7 并且安装了 Apache 2 2 21 和 PHP 5 2 17 我无法启用 mysql 模块 Windows 7 上是否存在已知问题 我运行 php info 并看到以下内容 C php gt
  • System.DirectoryServices - 服务器无法运行

    我在使用 Windows 身份验证的网站上收到错误消息 奇怪的东西 仅当用户尚未保存到数据库中时才会发生 新的未知用户 仅出现在实时系统上 本地开发环境一切正常 这是我在日志邮件中收到的内容 来源 System DirectoryServi
  • 具有 lld、ld 和 d 类型标识符的 size_t 变量的 printf

    我写了这个小代码 include
  • 使用 conda install 安装 Keras 包

    我已经安装了Anaconda作为用户帐户在服务器上打包 然后我安装keras by conda install keras 但是安装后 当我运行时import keras 它提出了no module names keras 任何人都可以帮忙
  • 如何发送带有“DELETE”HTTP 动词的请求?

    我想在 Rails 应用程序的视图中创建一个链接来执行此操作 DELETE sessions 我该怎么做呢 增加了复杂性 会话 资源没有模型 因为它代表用户登录会话 CREATE表示用户登录 DESTROY意味着注销 这就是 URI 中没有
  • 当前和未来元素的事件侦听器,无需 jQuery [重复]

    这个问题在这里已经有答案了 如果我没记错的话 我曾经看到一种将事件侦听器绑定到匹配特定条件的每个元素 可能是查询选择器 的方法 再次寻找它 除了高度依赖 jQuery 的人之外 我找不到任何东西 但我更喜欢一种真正简单的方法来实现这一点 有