2011-09-28 1 views
6

Я ищу способ отключить .toggle() прикрепленную к DIVотключить метод JQuery .toggle()

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

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

    ); 
} 

Более объяснение:

Это приложение карты. toggle, связанный с кнопкой изображения. Карта загружается на уровне масштабирования 4. Пользователь увеличивает масштаб, и соответствующая кнопка становится активной только тогда, когда пользователь увеличился более чем на уровень масштабирования 6. Как только пользователь увеличит масштаб до уровня 6, я хочу, чтобы кнопка переключения снова неактивны.

+0

Самый лучший способ, чтобы отвязать на 'click' события, которые добавляет включать или. Я бы опубликовал ответ, но сейчас у меня нет времени. –

+0

Вероятно, вы не должны использовать toggle() в этом случае; toggle() использует внутренний счетчик, и, если вы попытаетесь включить и выключить его, скорее всего, столкнется. – 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

К сожалению, он не работает. Он активирует переключатель, но unbind не происходит. – punkish

3

Вы можете использовать .cleanData():

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

Demo.

+0

Ваш демо-код, похоже, ничего не делает. Кроме того, что означает этот синтаксис? –

+0

@Ben Lee - прокомментируйте последнее заявление и нажав на divs, снова будет работать. Он убивает 'toggle()'. – karim79

+0

Является ли cleanData документированным где угодно? Я ищу его, но я не могу найти страницу, которая объясняет, что она должна делать. –

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'); 
}); 
Смежные вопросы