2012-05-19 45 views
1

我有一個可以在懸停時擴展的側邊欄。如何在第二次點擊時鎖定某個功能

因爲展開,摺疊可能會有時會打擾我想要在有人點擊側欄時解除懸停。

底部的代碼工作用於取消綁定的第一次,但第二次點擊重新啓用再次徘徊不起作用:

$('.action').click(function(){ 
     $(this).unbind('mouseenter').unbind('mouseleave'); 
     $(this).click(function(){ 
      $(this).bind('mouseenter').bind('mouseleave'); 
     }); 
    }); 

所以,我怎麼可以綁定鎖定(請沒有如果當再次徘徊施工)。

問候

+1

_please no if construction_ - why? – Andreas

+0

不使用* if *條件,你必須每次附加和分離事件處理程序,這是真的**糟** – pomeh

+0

我儘量避免jQuery中的太多邏輯,但似乎沒有其他好方法:) – bodokaiser

回答

1
$('.action').on('mouseenter mouseleave', doStuffOnHover); //initial handler 

var bound = true; 

$('.action').on('click', function(){ 
     $(this)[bound ? 'off' : 'on']('mouseenter mouseleave', doStuffOnHover); 
     bound=bound ? false:true; 
}); 

function doStuffOnHover() { 
    //do stuff here 
} 

FIDDLE

如果的mouseenter做不同的事情/離開,你當然會需要兩個功能。

+0

謝謝這個作品很好:) – bodokaiser

+0

不客氣,還添加了小提琴! – adeneo

+0

'bound = bound?假:真的;'? wth - 爲什麼不簡單地'bound =!bound;'? – ThiefMaster

1

您需要實際事件.bind('mouseenter', function() { /* whatever */ });綁定。 jQuery不會自動知道你想重新綁定已經存在的東西。如果你願意,你可以使用一個命名函數,所以你不必重寫它。

相關問題