2011-07-18 37 views
1

我正在使用JQuery並試圖使用delegate作爲hover操作。問題是懸停行動可以得到兩個處理程序,處理和處理。我怎樣才能實現這個使用委託?如何給兩個函數委託函數

我已經試過這一點,並沒有奏效:

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

回答

5

根據該文檔爲.hover

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

所以,你應該能夠只是調用delegate每進行一次的這些功能:

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

好點;我剛剛更新了我的回答 –

+0

你可以在http://jsfiddle.net/上發佈一個問題的例子嗎? –

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