问题标签 [event-delegation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
257 浏览

jquery - 1.7.2 中的 jQuery 事件委托

有没有办法使用 jQuery 委托事件,该事件将对应于页面上与选择器匹配的所有元素,而不是委托 from $(document)

由于这可能措辞不佳,因此问题如下:

过去jQuery.live,所有与选择器匹配的元素都有委托事件。这被jQuery.delegate哪个将特定上下文选择器中的事件委托给其子级所取代,而后者又被 取代jQuery.on,后者实际上做同样的事情,但在幕后有不同的位(我想)。

我想要做的是安全地为div.foo我页面上的每个页面添加一个事件处理程序,无论它可能存在于何处或何时存在。根据文档和实证研究,以下内容只会绑定到.foo脚本运行时存在的元素。由于.foo稍后可能会在页面上放置元素的代码,因此这并不完全有效。

由于live已弃用(可能已删除?),我试图不使用它,但我能想出的唯一解决方案是

但这不是live最初在幕后所做的吗?更重要的是,有什么重要的理由这样做吗?

我们专门使用版本 1.7.2,但通用 jQuery 答案也会有所帮助。

0 投票
3 回答
9619 浏览

javascript - Jquery on event 不绑定不存在的元素

好的,这里是 jsfiddle 示例

http://jsfiddle.net/HTjCT/1/

正如您在悬停时看到的那样,它不会触发 mouseover 事件

我怎么解决这个问题 ?

我正在使用 Jquery 1.9

javascript

0 投票
4 回答
955 浏览

jquery - 我在表格中的复选框立即未选中

我有一张带复选框的桌子。当一个复选框被选中时,我会用 jQuery 捕获事件,但这个复选框会立即取消选中。

jsfiddle:http: //jsfiddle.net/K4uDa

问题出在哪里?

抱歉,我在这里更新了我的 jsfiddle:http: //jsfiddle.net/K4uDa/1/

我添加了一个'return false',因为我不希望在选中/取消选中复选框时触发其他事件。

0 投票
1 回答
557 浏览

jquery - 在 jQuery 中使用 on() 获取容器

我在 div 中有一个按钮来隐藏该 div,我想将 div 传递给处理程序。这是我当前的代码:

有什么办法可以避免重新选择容器?像这样的东西会很好:

0 投票
1 回答
53 浏览

jquery - 将 .live 函数转换为 .on 的问题

更新一些代码库并遇到一个我似乎无法克服的问题。我已经阅读了 .on 文档,并觉得我对它有足够的了解。登录时通过 ajax.load 引入表单。没有问题。在一个简单的设置中,例如:

使用 .live 的旧代码是这样的

尝试像这样使用 new(ish) .on 调用

我已经调用了包含动态元素#FXCMForm、事件类型“click”和触发它的元素“#Button1”的容器,但是当我单击时,它只是将返回的 PHP 数据转储到一个空白页面中,而不是做任何 ajax 的东西. 有任何想法吗?谢谢你

0 投票
2 回答
108 浏览

javascript - 使用事件委托时如何访问与元素关联的数据

我在 n 行上使用事件委托,我的旧方法是将每一行与事件绑定,代码看起来像这样:

注意:在这种方法中,每个行元素 ( theDiv) 都可以访问它们的数据。

现在的问题是,我想绑定单击container并访问数据,事件委托方法如下所示:

现在,如何访问与每一行关联的数据?

根据我的学习:我可以将数据添加到

  • data-*,但这会限制我使用简单的数据类型
  • $.data 关联到元素

有没有其他方法可以做到这一点?

0 投票
1 回答
2334 浏览

javascript - 删除动态生成的
点击

我正在尝试<div>单击它。当我尝试使用它时,.live()它告诉我:

对象没有方法 live()

我使用的是 jQuery 版本 1.9,因此live已被删除。

0 投票
1 回答
1550 浏览

datatables - 带有 on() 的 jquery 事件委托到数据表

我有 4 页的 jquery 数据表。当我加载页面时,点击事件工作正常。从第二页开始,点击事件不起作用。我阅读了http://api.jquery.com/on/ 链接,但我很困惑让它工作。

该表作为 ajax 客户端加载,当我对表进行分页时,会用新数据刷新。如何将点击事件附加到下一组行

这是jsfiddle的链接

0 投票
2 回答
4079 浏览

javascript - jQuery.on() 是如何工作的?

我还没有看到这个函数的来源,但我想知道,它是这样工作的:

  1. 通过它们的选择器选择元素
  2. 将提供的事件处理程序委托给他们
  3. 在该选择器上运行 asetInterval并不断取消委托,然后重新委托同一事件

或者对此有纯 JavaScript DOM 解释?

0 投票
2 回答
2379 浏览

jquery - jQuery:单个 mouseenter/mouseleave 处理程序

我需要跟踪页面上所有元素的 mouseenter / mouseleave 事件。

直观地编写的代码是:

但是每次 mouseenter 发生在子元素上时它都会触发 mouseleave 事件,从而抵消了 mouseenter/mouseleave 的所有好处,即它的工作方式类似于 mouseover/mouseout。

有没有办法在不将处理程序直接附加到所有元素的情况下处理这个问题?

这看起来像一个 jQuery 错误吗?因为从我所知道的和我读过的 jQuery 文档看来,上面的代码应该可以正常工作。

JSBin 玩:http: //jsbin.com/axuluc/2/

编辑:这按预期工作:http: //jsbin.com/axuluc/9/