说我有以下内容:
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)
从上面的内容可以看出,与&
符号的组合只有在附加事件时才有效...?
答案 0 :(得分:88)
jQuery add method就是你想要的:
将更多元素(由给定表达式匹配)添加到匹配元素集
var a = $("#a");
var b = $("#b");
var combined = a.add(b)
答案 1 :(得分:38)
不要忘记jQuery选择器支持CSS逗号语法。如果您需要组合两个任意集合,其他人的建议都在标记上,但如果它对ID为a
和b
的元素执行操作非常简单,请使用$('#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);});