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中,后者什么都不做。
这是对以前版本的语义变化吗?
答
我认为你真正想要的是直接附加处理程序的元素,而不是使用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 */ })
}
}
这与仅仅向元素添加处理程序而不是委托代理有什么不同?也许我是误解。 – 2011-12-15 18:02:21
@詹姆斯:你不是,它只是有一个单一的入口点来绑定事件 – LeGEC 2011-12-15 18:40:12