如何赋予两个函数委托函数

时间:2011-07-18 12:58:14

标签: javascript jquery javascript-events delegates

我正在使用JQuery并尝试将delegate用于hover操作。问题是悬停操作可以获得两个处理程序,句柄和句柄输出。如何使用委托来实现这一目标?

我已经尝试了这个并且它不起作用:

 $(document).delegate('.box', 'hover',  
    function() { $(".a").addClass(".hover");}, 
    function() { $(".a").removeClass(".hover");});

2 个答案:

答案 0 :(得分:5)

根据.hover的文档:

$(selector).mouseenter(handlerIn).mouseleave(handlerOut);

因此,您应该只为这些功能调用delegate一次:

$(document)
  .delegate('.box', 'mouseenter', function() { alert(1); })
  .delegate('.box', 'mouseleave', function() { alert(2); });

答案 1 :(得分:1)

@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);
});

也就是说,如果您要委托给.delegate(),则无需使用document。请改用.live(),这更简洁:

$('.box').live('hover', function (event)
{
    // snip...
});