我正在使用JQuery并尝试将delegate
用于hover
操作。问题是悬停操作可以获得两个处理程序,句柄和句柄输出。如何使用委托来实现这一目标?
我已经尝试了这个并且它不起作用:
$(document).delegate('.box', 'hover',
function() { $(".a").addClass(".hover");},
function() { $(".a").removeClass(".hover");});
答案 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...
});