Salve pessoal!
Meu primeiro post no blog é uma dica rápida, com um problema que enfrentamos, semana passada, utilizando o método unbind da jQuery .
Vamos imaginar a seguinte situação:
Uma determina janela popup é aberta utilizando um template, no qual existe um elemento <button>com um handler para o evento onclick, por exemplo:
-
<button id="myActionDispatcher" onclick="alert('Hello World!');"></button>
Considerando que em determinadas situações o onclick handler deve ser alterado, o correto seria realizar o unbind do handler atual e realizar o bind do novo handler, por exemplo:
-
$('#myActionDispatcher').unbind('click');
-
$('#myActionDispatcher').bind('click', function(){
-
alert('novo onclick handler!');
-
});
Infelizmente isso não funcionou, aparentemente, o método unbind, só pode desassociar métodos previamente associados com o método bind. Sendo assim, foi necessário trabalhar da seguinte forma:
-
clickHandler = function(){
-
alert('Hello World!');
-
}
-
-
newClickHandler = function(){
-
alert('novo onclick handler!');
-
}
-
-
switchClickHandler = function(){
-
$('#myActionDispatcher').unbind('click'); // retira todos os handlers associados com o evento click
-
// ou ainda
-
$('#myActionDispatcher').unbind('click', clickHandler); // retira apenas o handler clickHandler
-
// após isso
-
$('#myActionDispatcher').bind('click', newClickHandler);
-
}
-
-
$(document).ready(function(){
-
// associamos ao evento clique a função com o comportamento padrão
-
$('#myActionDispatcher').bind('click', clickHandler);
-
});
Era isso, simples, direto, não? Porém nos causou algumas dores de cabeça.
Um abraço pessoal, até a próxima!