jQuery:委托给自己?

问题描述:

首先,我要说我使用的是旧版本的jQuery库(即1.4.2)。更新到jQuery 1.7需要一些时间(尤其是寻找bug),所以我正在寻找一个在1.4.2中工作的解决方案。jQuery:委托给自己?

我想编写一个函数:

function _setupGui($domNode, selector){ 
    $domNode 
    .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ } 
    .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ } 
    .delegate(selector, 'click', function(){ /* do smth awesome */ } 
} 

,并能够给出一个选择,允许选择“自我”。

有没有一个选择器,你可以传递给委托,它允许选择持有委托的节点?

在jQuery 1.7中,$domNode.on('click', null, function(){/*handler*/})就是这么做的,并且是$domNode.delegate(null, 'click', function(){/*handler*/})的实际实现。 但是,在1.4.2中,后者什么都不做。

这是对以前版本的语义变化吗?

+0

这与仅仅向元素添加处理程序而不是委托代理有什么不同?也许我是误解。 – 2011-12-15 18:02:21

+0

@詹姆斯:你不是,它只是有一个单一的入口点来绑定事件 – LeGEC 2011-12-15 18:40:12

我认为你真正想要的是直接附加处理程序的元素,而不是使用delegate。你可以自己处理。也许这样的事情,通过“自我”意味着只是附加事件:

function _setupGui($domNode, selector){ 
    if(selector == "self"){ 
     $domNode 
      .mouseenter(function(){ /* do smth awesome */ }) 
      .mouseleave(function(){ /* do smth awesome */ }) 
      .click(function(){ /* do smth awesome */ }) 
    }else{ 
     $domNode 
      .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ }) 
      .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ }) 
      .delegate(selector, 'click', function(){ /* do smth awesome */ }) 
    } 
}