链式触发两个jQuery事件

6
如果我有一个事件处理程序,如下所示:
function A() {
 ...
}

可以将一个事件分配给多个操作:

$("#test1").keyup(A);
$("#test2").change(A);

但我想知道是否可能只用一句话来完成,例如:
$("#test1").keyup, $("#test2").change (function () {
  ...
});

你想在不同的ID上声明链式事件吗?你真正想做什么? - Arnaud F.
我想将相同的函数分配给不同的ID和不同的事件(我的情况:一个SELECT需要响应onChange事件,而文本INPUT需要响应onKeyUp事件,但是是同一个函数UpdateGraph来管理事件)。 - Ivan
没有必要把它写成单一的链式结构,这只会让你的代码变得丑陋、难以阅读,并可能涉及到更多的jQuery函数调用,这真的是一个糟糕的想法。 - Jose Faeti
4个回答

5
$("#test2").bind('keyup change', A);

/编辑不同的元素和事件 - 它们是:

$("#test1, #test2").bind('keyup change', A);

或者

$("#test1").bind('keyup', A);
$("#test2").bind('change', A);

根据您的期望,可能没有更简单的方法。

它们是两个不同的元素。大家都过早下结论了。 - Mrchief
这将适用于监听与jQuery选择器匹配的元素上的这两个事件,但OP正在寻找两个不同元素上的两个不同事件。因此,仅在“#test1”上进行“keyup”或在“#test2”上进行“change”,而不是在“#test1”上进行“change”。 - Luke Stevenson
1
@Jacek_FH - 你的第二个编辑示例可以工作。但是,原始问题(OP)可能会坚持使用他们目前拥有的内容。你的第一个编辑示例将绑定两个元素的两个事件。 - James Allardice

3

哈哈!我建议永远不要使用这样相似的编码恐怖。 - Jose Faeti
@Jose Faeti - 完全同意。除非你想让某人离开:p - karim79

0
如果这些是同一个元素,比如说#test1,那么你可以链接这些方法。
$('#test1').change(A).keyup(A);

然而,如果有超过1个元素,您就无法将它们链接在一起,或者执行类似于您的示例的任何其他操作。


-1

简短的回答?不行。长的回答?完全不行。

很抱歉没有给出你期望的答案。但好消息是,除了这个限制,你的代码看起来非常棒。


答案是:可以,查看@jacek-kaniuk的回答。 - Jay Regal
1
@RensdeNobel:答案仍然是否定的。至少不是以OP想要的方式,即特定元素/触发器组合触发函数。当然,你可以监听所有你想要使用的触发器/事件,以及这些触发器/事件可能发生的所有元素,然后查看事件对象以确定是否检测到了正确的组合,但单独绑定每个组合可能更容易。 - Luke Stevenson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接