2013-04-02 3 views
0

Я пытаюсь найти простой способ отключить все обработчики событий jQuery элемента DOM, например hover, click и т. Д. Я знаю, что могу использовать unbind для этого. Но для этого потребуется код. Я просто хочу знать, есть ли какой-либо переключатель jQuery для управления этим? Кроме того, я знаю, что есть решение, использующее глобальную переменную, чтобы сделать это. Я не думаю, что хорошо писать жесткий код, как это.Отключить все события DOM

//in some event handler 
if (sometag) 
{ 
    //do something. 

} 

Это не изящно для кода. Любая идея или что-то я не знаю?

+0

Привет там я нашел эту статью для предотвращения действий: от: http://fuelyourcoding.com/jquery-events-stop -misusing-return-false/ –

+0

привет, друг, мне нужно время, чтобы прочитать и понять это. –

ответ

1

Ваш вопрос довольно широкий и общий. Если бы вы могли указать свой прецедентный прецедент, кто-то, вероятно, мог бы дать вам лучший ответ.

Еще один шаблон для активации/деактивации обработчиков событий на dom-узле - это делегирование обработки событий родительскому узлу и использование классов для включения и выключения обработчиков.

Что такое делегирование событий? Вы найдете простой ответ here.

Вот пример:

//HTML code : 

<ul id="myList"> 
    <li> 
     <input class="cbActivate" type="checkbox" /> <a href="#" class="link">first item</a> 
    </li> 
    <li> 
     <input class="cbActivate" type="checkbox" /> <a href="#" class="link">second item</a> 
    </li> 
    <li> 
     <input class="cbActivate" type="checkbox" /> <a href="#" class="link">third item</a> 
    </li> 
</ul> 

//javascript 
$('.cbActivate').on('click', function() { 
    $(this).closest('li').find('a.link').toggleClass('active'); 
}); 
// handling clicks on 'a.active' links is delegated to the parent '#myList' node 
$('#myList').on('click', 'a.active', function() { 
    alert("I'm an activated item !"); 
}); 

Здесь соответствующая jsfiddle

+0

Простите мое плохое языковое умение, я нашел, что ваше решение выглядит очень элегантно. Благодарю. но у меня есть еще один вопрос: может ли 'on' работать над элементом furture? Благодарю. –

+0

Да: если вы добавляете элементы как дочерние элементы '# myList', и они соответствуют фильтру, применяется обработчик. – LeGEC

+0

Хорошо. Я получил это. Спасибо. –

2

Если вы говорите только о своих обработчиках, и вы хотите иметь глобальный переключатель «on/off» для них, то с центральной переменной ваш тест обработчиков - вполне разумный подход, неплохой или безвкусный. (Я бы не на самом деле сделать это глобальную переменную, только переменную, все обработчики имеют доступ.)

В качестве альтернативы, вы можете переместить ваши события:

$("some selector").bind("click.myevents", handler); 
$("some selector").bind("hover.myevents", handler); 
// ... 

... и использовать пространство имена unbind все из них:

$("*").unbind(".myevents"); 

... но нет простого способа превратить их обратно снова, и накладные расходы на это, кажется, немного высоки.

+0

Да, правильно, будет тяжелая работа, чтобы вернуть их обратно. –

0

В случае, если вы действительно хотите, чтобы отвязать все обработчик событий вы можете просто использовать .off() без каких-либо аргументов:

$('p').off(); 

Как заселение вместо себя иного к этому вы могли бы использовать пространства имёны события, которые позволили бы вам отвязать все обработчик a пространство имен:

$('p').on('click.ns', handler).on('mouseover.ns', handler2).on('mouseout.otherns', handler3); 
$('p').off('.ns'); //only the first two handlers are unbound 
Смежные вопросы