2011-07-18 9 views
1

私はJQueryを使用しており、hoverアクションのためにdelegateを使用しようとしています。問題は、ホバーアクションが2つのハンドラーを得ることができることです。ハンドルはハンドルであり、ハンドルはハンドルです。どのように私は代理人を使用してこれを達成できますか?関数を委譲する2つの関数を与える方法

私はこれを試したし、それが動作しませんでした

$(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); 
}); 

が、それはあなただけdocumentに委任するつもりなら.delegate()を使用する必要があります。代わりに.live()を使用してください。これははるかに簡潔です:

$('.box').live('hover', function (event) 
{ 
    // snip... 
}); 
関連する問題