jQuery 中的多个链式 .on('click') 事件侦听器

Posted

技术标签:

【中文标题】jQuery 中的多个链式 .on(\'click\') 事件侦听器【英文标题】:Multiple chained .on('click') event listeners in jQueryjQuery 中的多个链式 .on('click') 事件侦听器 【发布时间】:2015-04-09 22:38:12 【问题描述】:

我在轮播插件 (GitHub repo here) 上有几个 click 处理程序。

当我最初编写它时,我忘记了 jQuery 链接:

$gallop.on("click", ".advance",  function() [snip 1] )
$gallop.on("click", ".retreat",  function() [snip 2] )
$gallop.on("click", ".autoplay", function() [snip 3] )
$gallop.on("click", ".picker",   function() [snip 4] );

它们都在同一个 .gallop 元素上,所以我可以通过将它们链接在一起来改进代码:

$gallop
    .on("click", ".advance",  function() [snip 1] )
    .on("click", ".retreat",  function() [snip 2] )
    .on("click", ".autoplay", function() [snip 3] )
    .on("click", ".picker",   function() [snip 4] );

他们也都在监听click 事件:只有每个处理程序的选择器不同。有没有办法将多个选择器/处理程序项放在同一个 .on() 方法中?像这样?

$gallop
    .on("click", 
        ".advance",  function() [snip 1] ,
        ".retreat",  function() [snip 2] ,
        ".autoplay", function() [snip 3] ,
        ".picker",   function() [snip 4] );

【问题讨论】:

你能使用事件委托吗?所以也许查看 event.target 以确定哪个被点击了?你有代码sn-p吗? @cgatian - 这已经是事件委托了。 好的。好吧,我猜你只是用我所说的话提供了一个答案.. 问题中提供的代码 sn-ps 可在链接到的 GitHub 项目上找到。 【参考方案1】:

没有在一个 .on() 调用中指定多对单独的选择器/处理程序的内置方法。

如果您希望为每个不同的选择器提供不同的事件处理功能,那么您的第二个选项可能是最简洁的方法。

您可以创建一个巨大的事件处理程序,然后基于目标进行分支(但除非您在所有处理程序中有一堆通用代码,否则这可能不是最简洁的方法):

$gallop.on("click", ".advance, .retreat, .autoplay, .picker", function(e) 
    // look at the class on e.target and decide what to do
)

【讨论】:

以上是关于jQuery 中的多个链式 .on('click') 事件侦听器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 链式写法

Jquery中的bind(),live(),delegate(),on()绑定事件方式

如何使用 jquery 在链式反应中附加 DOM

jQuery 链式编程

jquery笔记

防止jQuery .on多次绑定