2011-09-28 38 views
6

我正在尋找一種方法來禁用連接到一個div禁用一個jQuery .toggle()方法

if (condition) { 
    $("#div").toggle(
     function() { 
      do this 
     }, 
     function() { 
      do that 
     } 
    ); 
} 
else { 

    // How do I achieve this? 
    $("#div").disableToggle(

    ); 
} 

更多解釋.toggle()

這是一個地圖應用。問題的toggle綁定到圖像按鈕。地圖以縮放級別4加載。用戶放大,只有當用戶放大到縮放級別6以上時,該問題纔會變爲活動狀態。一旦用戶縮小到小於等級6,我希望切換按鈕再次變得不活躍。

+0

最好的辦法是解綁切換增加了'click'事件。我會發佈一個答案,但我現在沒有時間了。 –

+0

你可能不應該在這種情況下使用toggle(); toggle()使用內部計數器,如果嘗試打開和關閉,它很可能會變成borked。 – Kato

+0

這不是我正試圖關閉'toggle()'。這更像是我想在某種情況下禁用它。該應用程序依賴於特定的地圖縮放級別。只有在正確的縮放比例下,切換才能被激活。當用戶移出縮放範圍時,切換應該停用。可悲的是,它不起作用 – punkish

回答

6

爲什麼不直接取消綁定的點擊?

$('#div').unbind('click'); 
+0

'toggle'不是一個事件或事件處理程序。它是一個方便的函數,實際上增加了'click'處理程序 –

+1

所以我剛剛發現,解除綁定click事件似乎工作,雖然http://jsfiddle.net/finbarr/gePha/ – Finbarr

+0

完全像我對OP的問題的第一個評論說;)~~「最好的方法是解除綁定切換添加的點擊事件,我會發佈一個答案,但我現在沒有時間了。「我目前沒有時間發佈的答案(我在技術上是在工作的)會專門刪除特定的事件處理程序。你的答案刪除了所有這些。對於很多項目來說,這樣一個嚴厲的方法雖然很好,所以我提出了你的答案。我會添加一個警告,雖然指出這將刪除*所有*點擊處理程序。 –

3

你可以把condition的函數內:

$("#div").toggle(
    function() { 
     if (condition) { 
      //do this 
     } 
    }, 
    function() { 
     if (condition) { 
      //do that 
     } 
    } 
); 
1

如果你不通過匿名函數來toggle(),您可以使用該技術描述on this forum post解除綁定的事件。

+0

。它激活切換,但解除綁定不會發生。 – punkish

3

您可以使用.cleanData()

// this will destroy all data bound to that element 
$.cleanData($("#div")); 

Demo.

+0

你的演示代碼似乎沒有做任何事情。另外,這個語法應該是什麼意思? –

+0

@本·李 - 評論最後的聲明,並點擊divs將再次工作。它殺死了'toggle()'。 – karim79

+0

cleanData是否在任何地方記錄?我用google搜索,但我找不到解釋它應該做什麼的頁面。 –

2

這裏有一個辦法:

刪除所選用於切換類。小提琴這裏:http://jsfiddle.net/leifparker/rSP34/2/

HTML

<div class="button_toToggle"> Toggle it! </div> 
<div class="button_disableToggle"> Disable Toggle </div> 
<div class="happyDiv togglable">&nbsp;</div> 

JS

$('.button_toToggle').click(function(){ 
    $('.togglable').toggle(); 
}); 
$('.button_disableToggle').click(function(){ 
    $('.happyDiv').removeClass('togglable'); 
});