jQuery livequery 插件相当于 jQuery 1.7+

2024-02-10

是否有相当于 jQuery 1.7+ 的 jQuery livequery 插件?

我正在尝试动态绑定事件,读取 DOM 元素应基于 data-* 元素绑定的事件。

<a href="#" class="js-test" data-events="click">Test 1</a>
<a href="#" class="js-test" data-events="mouseover">Test 2</a>
 .. etc ..

我想将所有元素与类绑定.js-test但仅限于其中列出的事件data-events属性。

jQuery.on/live/bind/delegate 都要求事件作为参数传入。

这是在以下情况下查找页面上存在的 DOM 元素:document.ready,但是当我更新 DOM(AJAX、JS 等)时,我想要任何带有 class 的新元素.js-test也绑定它的事件。

livequery 插件(很旧,来自 jQuery 1.3 版本)似乎允许这样做,因为它简单地需要一个选择器和一个函数来针对与选择器匹配的任何内容运行。


As of jQuery 1.7 了on method http://api.jquery.com/on/,取代 live 方法。虽然它没有像您描述的那样传递或匹配选择器的简单方法,但可以通过传递动态值来完成此操作data-events代替事件类型,只要数据事件值与该事件匹配即可。

但是,由于传递到 on 方法的事件参数(第一个参数)的参数是从每个 data-events 属性(从匹配元素集中的每个元素)获取的,因此我们必须循环遍历匹配元素的集合,以便我们能够分别访问每个元素的单独数据事件属性值:

$('.js-test').each(function() { 
    $(this).on( $(this).attr("data-events"), function() {

        // event pulled from data-events attribute           
        alert("hello - this event was triggered by the " + $(this).attr("data-events") + " action.");

    });
});

我希望所有事件都映射到同一个函数,但让不同的事件触发不同 DOM 元素的函数调用。

由于您希望将所有事件映射到单个函数,因此此解决方案满足您的特定要求并解决您的问题。

但是,如果您的需求发生变化并且您发现需要映射函数事件集合以匹配每个事件类型,那么这应该可以帮助您开始:

var eventFnArray = [];
eventFnArray["click"] = function() { 
    alert("click event fired - do xyz here");
    // do xyz
};
eventFnArray["mouseover"] = function() { 
    alert("mouseover fired - do abc here"); 
    // do abc
};

$('.js-test').each( (function(fn) { 

   return function() {   
     $(this).on( $(this).attr("data-events"), function() {

        alert("hello - this is the " + $(this).attr("data-events") + " event");

        // delegate to the correct event handler based on the event type
        fn[ $(this).attr("data-events") ]();

     });
   }
})(eventFnArray)); // pass function array into closure

UPDATE:

这已经过测试,并且确实适用于添加到 div#container 的新元素。问题在于on方法函数。委托性质on仅当父元素包含在选择器中,并且仅当选择器传递到第二个参数时才有效,该参数通过 data-events 属性过滤目标元素:

HTML:

<div id="container">
    <a href="#" class="js-test" data-events="click">Test 1</a>
    <a href="#" class="js-test" data-events="mouseover">Test 2</a>
</div>

JavaScript:

$(document).ready(function() {
  $('.js-test').each(function() { 
      var _that = this;
      alert($(_that).attr("data-events"));

      $(this).parent().on(
          $(_that).attr("data-events"), 
              '.js-test[data-events="'+ $(_that).attr("data-events") +'"]', 
              function() {

                  // event pulled from data-events attribute           
                  alert("hello - this event was triggered by the " + $(_that).attr("data-events") + " action.");
              }
          );
      }
  ); 
});

此外,使用以下 jQuery 将项目添加到容器中以对其进行测试:

$('#container')
    .append("<a href='#' class='js-test' data-events='mouseover'>Test 3</a>");

试试看:

这里有一个jsfiddle http://jsfiddle.net/SYMnA/演示了经过测试和工作的功能。

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

jQuery livequery 插件相当于 jQuery 1.7+ 的相关文章

  • 将 Bootstrap CSS 中的列表居中[重复]

    这个问题在这里已经有答案了 重复报告后编辑 抱歉 我认为建议的重复项实际上可能是重复项 我先尝试了一下 但它对我不起作用 因此出现了一个新问题 再次查看新的建议答案后 我意识到我的问题可能与我正在使用的工具 codepen io 的开箱即用
  • 如何在 Android 上的 PhoneGap 中设置音频播放速率?

    有谁能够让音频播放速率在 Android 上工作吗 媒体播放器似乎覆盖 忽略音频标签的播放速率属性 None
  • Jquery 和 Django 多个复选框

    我是 jquery 的初学者 所以请耐心等待 我有一个 jquery 函数 允许我选择多个复选框并创建一个字符串 如下所示 function getSelectedVals var tmp input name checks each fu
  • 将 Regex 对象分配给 html 输入模式

    我需要以编程方式将正则表达式对象分配给输入元素模式属性 以下是我当前的实现 var regex d 5 element attr pattern regex toString slice 1 1 有没有更好的方法来做到这一点而不需要字符串操
  • 有没有办法动态更改 jqGrid 的单元格值?

    这个问题可能已经被问过很多次了 但我想知道是否可以动态更改 jqgrid 的单元格值 我基本上有一个网格 它通过 JSON 字符串加载数据 在特定列的某些行上 该值可能为 null 因此 预先知道哪个行 ID 是一个问题 然后能够将 nul
  • 同一元素上的“itemprop”和“rel”属性

    使用是否有效itemprop属性and the rel同一元素上的属性 示例来自Google 的站点名称文档 https developers google com search docs data types sitename包含 这给出
  • 在问题内显示内联块文本

    我一直在尝试显示内联块 如果我没有在 div 中添加任何内容 一切都会很好 但是当我这样做时 div 会折叠起来 我不知道确切的原因 任何想法 https jsfiddle net giancorzo ebqoptbd https jsfi
  • jquery 聚焦/聚焦

    我想要的是将 active 类添加到输入焦点上的输入 当焦点关闭时 删除该类 Thank s 一旦你包含了 jquery 库 它就非常标准了 input focus function this addClass active input b
  • 检测 Webkit/Chrome 中 HTML5 数字控件更改的事件?

    HTML5 为我们提供了一些新的输入元素 例如
  • UpdatePanel 破坏 JQuery 脚本

    这是我想做的事情的简化版本 基本上我有一个数据列表 里面有很多东西 当你将鼠标悬停在数据列表中的项目上时 我希望 jquery 隐藏 显示东西 问题是 在我进行数据绑定后 如果 gridview repeater datalist 位于更新
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • jquery 中的函数返回未定义[重复]

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

    我正在寻找一种方法来创建具有 5 个区域的纯 CSS 无 JavaScript 布局 如下所示 H A B C F
  • iphone jquery 移动闪烁问题

    我在 iPhone 上使用使用 jQuery mobile 开发的应用程序时遇到闪烁问题 我尝试了互联网上提供的几种解决方案 包括 CSS 更改 将过渡设置为 无 甚至在 jquerymobile js 中注释代码 但没有运气 我使用的 J
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • 为什么这些内联块元素会产生额外的宽度?

    这是这个问题的后续内容 仅使用 css 自动调整图像下的文本 https stackoverflow com questions 34185547 autofit text under image with only css 为什么这段代码
  • 从更多元素中仅获取唯一名称

    我动态渲染了 HTML 其中列出了未确定数量的单选按钮 这些按钮的名称代表数据库中的某些 id 我需要收集收音机的所有唯一名称 这是一个例子
  • 从 jQuery UI 对话框调用 Bootstrap 模式:超出最大调用堆栈大小

    我有一个有点奇怪的问题 我正在调用 Bootstrap Modal 同时打开了 jQuery UI 对话框并且正在获取RangeError Maximum call stack size exceeded 在控制台中 奇怪的是 只有当我在打

随机推荐

  • 如何使用selenium java在mozilla firefox上使用假网络摄像头

    我正在尝试自动化一个包含网络摄像头流的网站 为了使其自动化 我需要某种方法来伪造网络摄像头 我知道这个选项 use fake device for media stream在 Chrome 中模拟网络摄像头 这在 Chrome 中对我有用
  • jqGrid 和动态分组

    我正在对 jqGrid 进行一些动态分组 按照以下位置发布的示例 http www trirand com blog jqgrid jqgrid html http www trirand com blog jqgrid jqgrid ht
  • 服务器是否可以同时收到两个请求? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对服务器如何处理数千个请求有点困惑 我想如果有数千个请求 最终其中两个请求必须同时到达服务器 如果两条消息同时到达它 它只能处理一条 对
  • PHP:使用 preg_match 获取 url 变量?

    http www example com id 05 or http www example com id 05 name johnny 这是一个字符串 我想得到的值 id从中 它的正确模式是什么 您不需要正则表达式 除非您有充分的理由 否
  • 防止 HttpClient 4 遵循重定向

    我正在使用 Apache HttpComponents 库连接到我的 AppEngine 应用程序 为了对我的用户进行身份验证 我需要将身份验证令牌传递到应用程序的登录地址 http myapp appspot com ah login a
  • 下载大文件 - iPhone SDK

    我正在使用 Erica Sadun 的异步下载方法 项目文件的链接位于此处 download http uhelios com downloaderica zip 但是她的方法不适用于大尺寸 50 mb 或以上 的文件 如果我尝试下载超过
  • 如何访问组件中 FormArray 中定义的 HTML 中的控件 - Angular2

    我在用ReactiveFroms在我的应用程序中 当我添加static控制然后一切都工作正常 我正在展示validation使用错误inbuilt类的controls 在职的Plunkr https plnkr co edit AZ5Jgw
  • 如何注册私有 DICOM 标签?

    我想知道公司 例如飞利浦或西门子 如何注册私有 DICOM 标签 I mean 如何保证DICOM组不被其他厂家占用 假设飞利浦选择了标签 1111 00xx 那么它需要知道组 1111 尚未被占用 之后NEMA还需要参与吗 或者有其他组织
  • 无法在 android 中添加 addView

    我需要朋友们的帮助 这是我的活动 public class MainActivity extends Activity float values 700 400 100 500 600 float values1 70 40 10 50 O
  • System.IO.Packaging:无法确定域的身份

    我正在使用 System IO Packaging 在完全托管的桌面 Windows 窗体 应用程序中创建文件 在一定条件下 OPC包的写入会引发 无法确定域的身份 例外 我了解到它与独立存储有关 因为打包 API 有时会在那里创建临时数据
  • 如何使用引导行和列增加文本区域的高度

    我设计了一个表单 其中连续有两个项目 如下所示 我的输出 Code我用过的 div class row div class col sm 3 fieldset class form group fieldset div div
  • 计算unix日志文件中两个时间段之间的行数[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Log file
  • 如何创建一个从 goroutine 接收多个返回值的通道

    我在 Go 中有一个返回两个值的函数 我想将其作为 goroutine 运行 但我无法弄清楚创建接收两个值的通道的语法 有人能指出我正确的方向吗 定义一个包含两个值字段的自定义类型 然后创建一个chan那种类型的 编辑 我还添加了一个使用多
  • 未捕获的类型错误:FB.login 不是函数

    我正在使用 Facebook JavaScript API 创建 Facebook 登录功能并从 API 获取用户详细信息 当我以正常方式使用相同的代码时 我从 Facebook api 获取数据 当我尝试使用 requireJS 做同样的
  • 如何获取当前日期之前的 30 天?

    我有一个开始日历输入框和一个结束日历输入框 我们希望默认开始日历输入框为当前日期之前 30 天 结束日历输入框默认为当前日期 这是我的日期变量 var today new Date dd today getDate mm today get
  • 从资源中读取json文件并在JAVA中将其转换为json字符串

    我在代码中硬编码了这个 JSON 字符串 String json n id 1 n name Headphones n price 1250 0 n tags home green n n 我想将其移至资源文件夹并从那里读取它 我怎样才能在
  • 在 Cocoa 中创建 iTunes 风格源列表时遇到问题

    我正在开发一款可以与 iTunes 风格的源列表配合良好的软件 我一直在网上寻找如何实现它 但所有的例子似乎都有点粗略 我找到了马克 奥尔德里特的执行 http www latenightsw com blog p 29并尝试在我的项目中使
  • CouchDB - 创建或更新文档时触发代码

    我有一个在 CouchDB 中存储数据的页面 该页面直接通过 JavaScript 访问数据库 因此浏览器中没有隐藏太多逻辑 创建新文档时 有一些逻辑将数据元素提取到单独的字段中 以便可以搜索它们 创建或更新文档时是否可以在服务器上执行此逻
  • 如何使用 [object addGesture...] 从 C4Workspace 调用方法?

    我希望实现的是使用以下方法调用 C4Workspace m 中的方法 shape addGesture SWIPELEFT name swipeLeft action leftSwipeMethod 我知道这会尝试在 C4Shape 类中调
  • jQuery livequery 插件相当于 jQuery 1.7+

    是否有相当于 jQuery 1 7 的 jQuery livequery 插件 我正在尝试动态绑定事件 读取 DOM 元素应基于 data 元素绑定的事件 a href class js test Test 1 a a href class