2012-02-25 9 views
1

多分私はちょっと疲れましたが、ユーザーがメニュー以外の場所をクリックしたときに閉じたい右クリックメニューがあります。しかし、ユーザーが何か他のものをクリックしたときにそれを消す方法を理解することはできません。ここで要素をクリックしていないときにイベントをクリック

メニューを表示するためのコードです:

// If mouse click on was pressed 
$('#content_list table tr').bind('mouseup', function(event) { 
    // if right click 
    if(event.which == 3) { 
     showRightClickMenu(event); 
    } 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 

そして、これは、ユーザが文書の外にクリックした場合、私は最初のバインドチェックメニューに

// If mouse click outside document 
$(document).bind('blur', function(event) { 
    hideRightClickMenu(); 
    event.stopPropagation(); 
}); 

// If mouse click not on the menu 
$('*:not(#rightClickMenu *)').bind('mousedown keydown', function(event) { 
    hideRightClickMenu(); 
    event.stopPropagation(); 
}); 

を隠すために得たもので、 2番目のバインドは、ユーザーがメニューを除くすべてをクリックしたかどうかをチェックします。 しかし、もう1つは実際には機能しません。メニューをクリックすると、メニューは非表示になります。

そんなに難しいはずはありません...誰にでもアイデアがありますか?

答えて

1

このよう

$(document.body).bind('click', function() { 
    hideRightClickMenu(); 
}); 

$(window).bind('blur', function() { 
    hideRightClickMenu(); 
}); 
+0

これは機能するようです。ありがとうございました。 – Patrik

+0

@Patrikも2番目の答えの例を試してください。私は最近IEのいくつかの問題のために私の例を使用しました。たとえば、divのスクロールバーのクリックでフォーカスが失われました。 – Cheery

0

それを試してみてくださいfocusout()イベントで試してみて、on()の代わりに、古いbind()を使用。これは複数のサブメニューでも機能します。 http://jsfiddle.net/elclanrs/jhaF3/1/

// Something like this... 
$('#menu li').on('click', function() { 
    $(this).find('ul').show(); 
}).find('ul').on('focusout', function(){ 
    $(this).hide(); 
}); 
関連する問題