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

时间:2009-09-07 07:31:45

标签: 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

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

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


[更新]

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

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

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

从上面的内容可以看出,与&符号的组合只有在附加事件时才有效...?

9 个答案:

答案 0 :(得分:88)

jQuery add method就是你想要的:

  

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

var a = $("#a");
var b = $("#b");
var combined = a.add(b)

答案 1 :(得分:38)

不要忘记jQuery选择器支持CSS逗号语法。如果您需要组合两个任意集合,其他人的建议都在标记上,但如果它对ID为ab的元素执行操作非常简单,请使用$('#a,#b')

答案 2 :(得分:16)

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

$("#a, #b").click(function () {/* */});

我经常使用它,并且从未见过它不起作用(我不能在1.3.2之前说jQuery版本,但因为我没有在那里测试过)。希望有一天这会帮助某人。


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

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

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

答案 3 :(得分:8)

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

$.each([a, b], function()
{
    this.click(function () { });
});

答案 4 :(得分:4)

为什么不使用数组?这对我有用:

$([item1, item2]).on('click', function() {
      // your logic
});

答案 5 :(得分:2)

我只是试着弄乱这个,发现了一些非常酷的东西:

$(a & b).click(function() { /* WORKS! */ });

超甜!

编辑:现在我觉得因为没有正确测试这件事感到很尴尬。这样做,实际上是将点击事件放在所有内容上......不知道为什么会这样做,但是......

答案 6 :(得分:2)

您还可以组成一个类名,并为每个元素提供您想要使用的类。然后,您可以将事件绑定到共享该类的所有元素。

<p><a class="fakeClass" href="#">Click Me!</a></p>

<p><a class="fakeClass" href="#">No, Click Me!</a></p>

<div class="fakeClass">Please, Click Me!</div>

<script type="text/javascript">
    $(function () {
        $(".fakeClass").on("click", function () {
            alert("Clicked!");
        });
    })
</script>

答案 7 :(得分:0)

试试这个:甜蜜而简单。

var handler = function() {
    alert('hi!');
}
$.each([a,b], function() {
    this.click(handler);
}
顺便说一下,这种方法不值得麻烦。

如果您已经知道这些方法中只有两种,那么我猜最好的选择是

a.click(handler);
b.click(handler);

干杯!

答案 8 :(得分:0)

示例:

$("[name=ONE_FIELD_NAME], [name=ANOTHER_FIELD_NAME]").keypress(function(e){alert(e.which);});