【发布时间】:2011-02-10 03:09:57
【问题描述】:
我需要使用 jQuery 将单个事件处理程序附加到多个 DOM 元素。我目前正在使用 jQuery 的 each() 方法来实现这一点。见下文:
$([elm1, elm2, elm3]).each(function() {
this.click(eventHandler);
});
我想知道是否有一种方法可以在不使用 each 方法和闭包的情况下做到这一点。我以为我可以做类似的事情:
$(elm1, elm2, elm3).click(eventHandler);
这种语句在 Prototype.js 中有效,但在 jQuery 中无效。我问这个问题的原因是因为在同时使用 Prototype.js 和 jQuery 之后,我发现 jQuery 需要更简单的语句才能在几乎每个领域实现相同的任务所以我认为必须有更好的方法来做到这一点?
更新
经过一些调试,结果发现我最初尝试使用的是:
$([elm1, elm2, elm3]).click(eventHandler);
失败是因为变量 elm1、elm2 和 elm3 是使用 jQuery 的 $ 函数创建的。所以问题已经改变了,为什么以下方法不起作用:
var elm1 = $('#elm1');
var elm2 = $('#elm2');
var elm3 = $('#elm3');
$([elm1, elm2, elm3]).click(eventHandler);
但使用 DOM 可以做到以下几点:
var elm1 = document.getElementById('elm1');
var elm2 = document.getElementById('elm2');
var elm3 = document.getElementById('elm3');
$([elm1, elm2, elm3]).click(eventHandler);
【问题讨论】:
-
@Camsoft:正如你所说,
elm1 elm2 elm3是使用$创建的(意味着动态),你可以像我之前提到的那样为它们使用 jquery 的实时功能。 -
@Sarfra 好吧,看来我不完全理解 jQuery 在这里做什么。基本上,变量 elm1、elm2 和 elm3 是函数参数,因此它们可能是本机 DOM 对象或 jQuery 版本,具体取决于调用函数时使用的内容。
标签: jquery events event-handling prototypejs