2011-09-28 13 views
6

szukam sposobu, aby wyłączyć .toggle() dołączony do divwyłączyć metodę jQuery .toggle()

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

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

    ); 
} 

więcej wyjaśnień:

Jest to aplikacja map. Wspomniany obiekt toggle jest powiązany z przyciskiem obrazu. Mapa ładuje się na poziomie powiększenia 4. Użytkownik przybliża, a przycisk staje się aktywny tylko wtedy, gdy użytkownik jest powiększony o więcej niż poziom powiększenia 6. Gdy użytkownik zmniejszy się do poziomu mniejszego niż 6, chcę, aby przycisk przełącznika ponownie stać się nieaktywnym.

+0

Najlepszym sposobem jest rozwiązać te 'click' zdarzenia włączać dodaje. Wpisuję odpowiedź, ale teraz jestem poza czasem. –

+0

Prawdopodobnie nie powinieneś używać przełączania() w tym przypadku; toggle() używa wewnętrznego licznika i jest bardzo prawdopodobne, że zostanie zakorkowany, jeśli spróbujesz go włączyć i wyłączyć. – Kato

+0

To nie jest tak, że próbuję wyłączyć 'toggle()'. Jest bardziej jak chcę go wyłączyć pod pewnymi warunkami. Aplikacja zależy od określonego poziomu powiększenia mapy. Tylko przy prawidłowym powiększeniu przełącznik powinien być aktywny. Gdy użytkownik opuści zakres powiększenia, przełącznik powinien się dezaktywować. – punkish

Odpowiedz

6

Dlaczego nie wystarczy rozpiąć kliknięcie?

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

'toggle' nie jest zdarzeniem ani funkcją obsługi zdarzeń, jest to funkcja wygody, która dodaje" kliknięcie " Obsługiwałem: –

+1

Po prostu odkryłem, że odklejenie zdarzenia click wydaje się jednak działać: http://jsfiddle.net/finbarr/gePha/ – Finbarr

+0

dokładnie tak, jak powiedział mój pierwszy komentarz na temat PO;) ~~ "Najlepszy sposób ma na celu usunięcie powiązania zdarzeń kliknięcia, które przełączają dodawanie. Postawiłbym odpowiedź, ale teraz jestem poza czasem ". Odpowiedź, na którą nie mam obecnie czasu na opublikowanie (jestem technicznie w pracy) polegała właśnie na usunięciu tego konkretnego programu obsługi zdarzeń. Twoja odpowiedź usuwa je wszystkie. Dla wielu projektów taka drakońska metoda jest jednak w porządku, więc przegłosowałem twoją odpowiedź. Dodałbym do niego ostrzeżenie, chociaż zwróciłbym uwagę, że spowoduje to usunięcie * wszystkich * procedur obsługi kliknięć. –

3

Można umieścić condition wewnątrz funkcji:

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

Jeśli nie mijały funkcje anonimowe do toggle(), można użyć techniki opisane on this forum post aby rozpiąć zdarzenia.

+0

Niestety, to nie działa. Aktywuje przełącznik, ale nie ma odwrotu. – punkish

3

Można użyć .cleanData():

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

Demo.

+0

Twój kod demonstracyjny nie wydaje się nic. Co to znaczy ta składnia? –

+0

@Ben Lee - skomentuj ostatnie oświadczenie i kliknięcie div zadziała ponownie. Zabija 'toggle()'. – karim79

+0

Czy cleanData jest udokumentowana w dowolnym miejscu? Googlowałem, ale nie mogę znaleźć strony, która wyjaśnia, co powinna zrobić. –

2

Oto sposób:

Usuń klasę, która jest wybrana do przełączenia. Fiddle tutaj: 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'); 
}); 
Powiązane problemy