I'm using JQuery and trying to use delegate
for the hover
action. Problem is the hover action can get two handlers, the handle in and the handle out. How can I achieve this using delegate?
I开发者_如何学编程've tried this and it didn't work:
$(document).delegate('.box', 'hover',
function() { $(".a").addClass(".hover");},
function() { $(".a").removeClass(".hover");});
According to the docs for .hover
:
$(selector).mouseenter(handlerIn).mouseleave(handlerOut);
So you should be able to just call delegate
once for each of these functions:
$(document)
.delegate('.box', 'mouseenter', function() { alert(1); })
.delegate('.box', 'mouseleave', function() { alert(2); });
An alternative to @Justin's solution is to check the event type in the callback:
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);
});
That said, it's unnecessary to use .delegate()
if you're just going to delegate to document
. Use .live()
instead, which is much more concise:
$('.box').live('hover', function (event)
{
// snip...
});
精彩评论