Javascript (jquery) – Manipuladores Múltiplos ligados a um evento: Como separar apenas um?

Neste módulo em que estou trabalhando, tenho um ouvinte para um evento ‘resize’ na janela. Toda vez que o módulo é executado, preciso verificar se já existe um listener registrado nesse evento e separá-lo, para evitar comportamento indesejado, vazamentos de memory e etc.

Até aí tudo bem, mas, neste aplicativo em que estamos trabalhando, é provável que alguns manipuladores já estejam anexados ao evento ‘resize’ e eu não posso chamar $(window).off('resize') , já que isso liberar todos os outros manipuladores de events previamente registrados por outros plugins ou módulos.

Sendo assim, gostaria de saber se existe uma maneira de identificar meu manipulador e apenas destacar as coisas que eu mesmo registrei. Como faço para definir um identificador para o meu manipulador de events para ser referenciado na function .off() ?

Qualquer ajuda seria boa.

Aqui 2 sugestões diferentes. Você pode dar um namespace ao seu evento ou passar uma function anônima quando estiver vinculando.

Exemplo ao usar o namespace:

 $(window).on('resize.event1', function(){}); $(window).on('resize.event2', function(){}); //Only turn off event 2 $(window).off('resize.event2'); 

O jQuery permite que você identifique seu evento. Esse comportamento é chamado de namespace. O evento atual e o nome do evento devem ser separados por um ponto. Nesse caso, estou vinculando 2 events de redimensionamento (lado esquerdo do ponto), um com o nome event1 e outro com event2 .

Ao identificar o evento, você pode remover (ou acionar) um único evento quando um object tiver vários do mesmo evento.

 $(window).trigger('resize'); //Trigger both; $(window).trigger('resize.event2'); //Trigger event2; 

Exemplo usando funções nomeadas:

 $(window).on('resize', function1); $(window).on('resize', function2); //Only turn off event 2 $(window).off('resize', function2); 

A associação de uma function anônima não permite remover o evento se a function transmitida corresponder à function de evento atual. Porque function2 === function2 , somente a segunda function será removida desde function1 !== function2 !

Se você usar manipuladores nomeados (em oposição a funções anônimas), você pode passar o nome do manipulador para off para remover apenas aquele ( http://api.jquery.com/off/ )

 function flash() { $( "div" ).show().fadeOut( "slow" ); } $( "body" ).off( "click", "#theone", flash ) 

Faça algo assim

 $(window).off('resize.myCustomEvent'); 

e vice-versa para anexá-lo