【问题标题】:How to give two functions to delegate function如何给两个函数委托函数
【发布时间】:2011-07-18 12:58:13
【问题描述】:
我正在使用 JQuery 并尝试将 delegate 用于 hover 操作。问题是悬停动作可以得到两个处理程序,句柄输入和句柄输出。如何使用委托来实现这一点?
我试过了,但没用:
$(document).delegate('.box', 'hover',
function() { $(".a").addClass(".hover");},
function() { $(".a").removeClass(".hover");});
【问题讨论】:
标签:
javascript
jquery
delegates
jquery-events
【解决方案1】:
根据.hover 的文档:
$(selector).mouseenter(handlerIn).mouseleave(handlerOut);
因此,您应该能够为每个函数调用一次delegate:
$(document)
.delegate('.box', 'mouseenter', function() { alert(1); })
.delegate('.box', 'mouseleave', function() { alert(2); });
【解决方案2】:
@Justin's solution 的替代方法是检查回调中的事件类型:
function onMouseenter()
{
alert(1);
}
function onMouseleave()
{
alert(2);
}
$(document).delegate('.box', 'hover', function(event)
{
if (event.type === 'mouseenter') onMouseenter.apply(this, arguments);
else onMouseleave.apply(this, arguments);
});
也就是说,如果您只是要委托给document,则无需使用.delegate()。改用.live(),这样更简洁:
$('.box').live('hover', function (event)
{
// snip...
});