jquery事件委派的原型

jquery事件委派的原型,jquery,prototypejs,Jquery,Prototypejs,我尝试将jquery作为javascript库而不是原型。现在,对于原型中的事件委派,我可以执行以下操作: $('wrapper').observe('click', function(event) { var foo = Event.findElement(event, '.foo1'); if (foo) // do something var bar = Event.findElement(event, '.bar1');

我尝试将jquery作为javascript库而不是原型。现在,对于原型中的事件委派,我可以执行以下操作:

  $('wrapper').observe('click', function(event) {
        var foo = Event.findElement(event, '.foo1');
        if (foo) // do something 

        var bar = Event.findElement(event, '.bar1');
        if (bar) // do something else
    });
这意味着文档上只放置了一个单击处理程序

我知道jquery有live/delegate方法,但似乎需要在调用中提供选择器(除非我弄错了?)。有没有一种类似的方法可以让单击处理程序执行类似的操作?还是把它们分开作为单独的事件更好


谢谢

我觉得把它们分开比较干净。当你看到结果时,它更干净/更容易维护。下面是它的样子:

$('#wrapper').delegate('.foo1', 'click', function(event) {
  // do something for .foo1 
})).delegate('.bar1', 'click', function(event) {
  // do something for .bar1
});
要回答“是”,您可以使用单个处理程序,例如:

$('#wrapper').delegate('.bar1, .foo1', 'click', function(event) {
  if($(this).is('.foo1') // do something for .foo1 
  if($(this).is('.bar1') // do something for .bar1 
});

还有其他近似方法,例如使用和。但这种方法和其他方法效率较低,维护起来也有点困难,至少对我来说,你可以决定什么是最好的,但我个人会选择这两种处理程序。

我认为将它们分开比较干净。当你看到结果时,它更干净/更容易维护。下面是它的样子:

$('#wrapper').delegate('.foo1', 'click', function(event) {
  // do something for .foo1 
})).delegate('.bar1', 'click', function(event) {
  // do something for .bar1
});
要回答“是”,您可以使用单个处理程序,例如:

$('#wrapper').delegate('.bar1, .foo1', 'click', function(event) {
  if($(this).is('.foo1') // do something for .foo1 
  if($(this).is('.bar1') // do something for .bar1 
});

还有其他近似方法,例如使用和。但这种方法和其他方法效率较低,维护起来也有点困难,至少对我来说,你可以决定什么是最好的,但我个人会选择这两个处理程序。

我试图在jQuery中复制你的例子(注意:正如Nick在评论中指出的那样,这可能不会像您希望的那样在所有情况下都有效。Nick的回答显示了使用jQuery的.delegate()的更好方法):


我试图在jQuery中复制您的示例(注意:正如Nick在评论中指出的,这可能不会在所有情况下都像您希望的那样起作用。Nick的回答显示了使用jQuery的.delegate()的更好方法):


这不完全相同,因为单击可能起源于这些元素的子元素,而目标本身不会有类。@尼克·克雷弗:你说得对。我添加了一条注释,指出了这些限制。这不完全相同,因为单击可能起源于这些元素的子元素,而目标本身不会有类。@Nic克雷弗:你说得对。我加了一张便条,指出了这些限制。