2011-01-31 41 views
0

我點擊一個元素時點擊事件,當點擊綁定另一個點擊事件的窗口上有一個反向操作函數的回調。在這種情況下,它只是一個菜單,就像一個OS菜單,點擊一個菜單,然後當你點擊一個菜單項或菜單外部時,它將關閉菜單。想想右鍵點擊菜單,Ubuntu/Mac的頂部菜單欄等防止點擊窗口時綁定點擊?

我的問題是,因爲即時通訊綁定窗口上的點擊事件點擊它觸發窗口點擊也。我怎樣才能「延遲」它,使其所有「未來」點擊?如果您要查找的app().debug('closed/clicked?','console');你會看到兩個,他們都上點擊...

所以我的代碼如下所示:

 {..code...} 
     actionMenu: function(action,item){ 
     if(action == 'open'){ 
      $(window).bind('click.contextMenus',app().actionMenu('close')); 
      $(item).addClass('active').find('ol').css({display:'block',top:$(item).outerHeight()+'px'}); 
     } 
     else if(action == 'close'){ 
      app().debug('closed?','console'); 
      $('#menu .active').removeClass('active'); 
      $('#menu > ol > li ol').css({display:'none'}); 
      $(window).unbind('click.contextMenus'); 
     } 
     }, 
     {..code...} 

和:

$('#menu > ol > li').click(function(e){ 
    if($(this).find('ol').is(':visible')){ 
     app().actionMenu('close'); 
    } 
    else{ 
     app().debug('clicked?','console'); 
     app().actionMenu('open',this); 
     return false; 
    } 
    }); 

回答

1

相反在窗口上綁定,你可以在<body>上綁定(我不知道在窗口綁定時是否停止傳播會起作用)

$('body').bind('click.contextMenus',app().actionMenu('close')); 

,然後你可以防止你的菜單的onclick事件傳播,從發射的父元素阻止它的onclick

$('#menu > ol > li').click(function(e){ 
    e.stopPropagation(); 
    if($(this).find('ol').is(':visible')){ 
     app().actionMenu('close'); 
    } 
    else{ 
     app().debug('clicked?','console'); 
     app().actionMenu('open',this); 
     return false; 
    } 
    }); 

編輯

我沒有看不夠緊密。這是問題的線:

$(window).bind('click.contextMenus',app().actionMenu('close')); 

你實際上在那裏調用actionMenu()函數。你需要做的這個代替:

$(window).bind('click.contextMenus', function() { app().actionMenu('close') }); 
+0

嘗試添加'返回false;``的應用程序()actionMenu( '親密')之後;` – Damp 2011-01-31 20:32:41