一次将事件附加到多个元素

And*_*ech 52 javascript jquery events

说我有以下内容:

var a = $("#a");
var b = $("#b");

//I want to do something as such as the following : 

$(a,b).click(function () {/* */}); // <= does not work

//instead of attaching the handler to each one separately
Run Code Online (Sandbox Code Playgroud)

显然上面的方法不起作用,因为在$函数中,第二个参数是context,而不是另一个元素.

那么如何一次性将事件附加到两个元素上呢?


[更新]

peirix发布了一个有趣的片段,其中他将元素与&符号结合在一起; 但我注意到了这一点:

$(a & b).click(function () { /* */ }); // <= works (event is attached to both)

$(a & b).attr("disabled", true); // <= doesn't work (nothing happens)
Run Code Online (Sandbox Code Playgroud)

从上面你可以看到的,显然,与&标志的组合只有在附加事件时才有效......?

Gar*_*eth 88

jQuery的添加方法是你想要什么:

将更多元素(由给定表达式匹配)添加到匹配元素集

var a = $("#a");
var b = $("#b");
var combined = a.add(b)
Run Code Online (Sandbox Code Playgroud)

  • 想要添加超过1个元素,所以我做了var combined = a.add(b,c,d)它不起作用你必须做a.add(b).add(c).add(d) (7认同)

hob*_*bbs 38

不要忘记jQuery选择器支持CSS逗号语法.如果您需要任意两个集组合,其他人的建议是上的标记,但如果它是为做一些与标识元素的简单ab,使用$('#a,#b').

  • 是的,我知道这一点,但我的问题是他们已经在变量 (3认同)

The*_*Man 16

这个问题已经得到了解答,但我认为更简单,更简化的方法来实现同样的目的是依靠jQuery和CSS的选择器模型之间的相似性,并且只做:

$("#a, #b").click(function () {/* */});
Run Code Online (Sandbox Code Playgroud)

我经常使用它,从来没有看到它不起作用(我不能说1.3.2之前的jQuery版本,虽然我没有在那里测试过).希望有一天这会帮助某人.


更新:我刚刚重读了这个帖子,并且错过了你对有问题的节点已经保存到变量的评论,但这种方法仍然有效,只需要一个小小的调整.你会想做:

var a = $("#a");
var b = $("#b");
$(a.selector+", "+b.selector).click(function () {/* */});
Run Code Online (Sandbox Code Playgroud)

jquery所做的一件很酷的事情就是它向它返回的节点添加了一些jquery特定的属性(selector,它是用来抓取该节点的原始选择器之一).如果您使用的选择器已包含逗号,则可能会遇到一些问题.它也可能是有争议的,如果这比使用add更容易,但它是一个有趣的例子,如何很酷的jquery :).


Gre*_*reg 8

你可以把它们放在一个数组中:

$.each([a, b], function()
{
    this.click(function () { });
});
Run Code Online (Sandbox Code Playgroud)