Eu tenho um input type="image"
. Isso age como as anotações da célula no Microsoft Excel. Se alguém digitar um número na caixa de texto com a qual ele input-image
está emparelhado, eu configurarei um manipulador de eventos para o input-image
. Então, quando o usuário clica no botão image
, ele exibe um pequeno pop-up para adicionar algumas notas aos dados.
Meu problema é que, quando um usuário digita zero na caixa de texto, preciso desativar o input-image
manipulador de eventos. Eu tentei o seguinte, mas sem sucesso.
$('#myimage').click(function { return false; });
fonte
unbind()
está funcionando? Eu adicionei e os dois eventos ainda estão disparando.$('#myimage').off('click').on('click',function(){...})
.unbind()
me ajudou em uma situação em que eu estava alternando várias caixas de seleção, mas, reliz, estava adicionando o.click()
manipulador repetidamente, causando a interrupção do aplicativo.Isso não estava disponível quando esta pergunta foi respondida, mas você também pode usar o método live () para ativar / desativar eventos.
O que acontecerá com esse código é que, quando você clicar em #mydisablebutton, ele adicionará a classe desativada ao elemento #myimage. Isso fará com que o seletor não corresponda mais ao elemento e o evento não seja acionado até que a classe 'disabled' seja removida, tornando o seletor .live () válido novamente.
Isso tem outros benefícios ao adicionar estilos baseados nessa classe também.
fonte
live()
, nunca pensou em usá-lo dessa maneira antes ... Além da conveniência de codificação, é mais rápido ou oferece outras vantagens ao usar o bind / unbind?Se você deseja responder a um evento apenas uma vez , a seguinte sintaxe deve ser realmente útil:
Usando argument.callee , podemos garantir que um único manipulador de função anônima específico seja removido e, portanto, tenha um único manipulador de tempo para um determinado evento. Espero que isso ajude os outros.
fonte
Isso pode ser feito usando a função unbind.
Você pode adicionar vários manipuladores de eventos ao mesmo objeto e evento no jquery. Isso significa que adicionar um novo não substitui os antigos.
Existem várias estratégias para alterar manipuladores de eventos, como namespaces de eventos. Existem algumas páginas sobre isso nos documentos on-line.
Olhe para esta pergunta (foi assim que aprendi a desatar). Há alguma descrição útil dessas estratégias nas respostas.
Como ler as funções de retorno de chamada em foco suspenso no jquery
fonte
talvez o método unbind funcione para você
fonte
Eu tive que definir o evento como nulo usando o prop e o attr. Eu não poderia fazer isso com um ou outro. Também não consegui .unbind para o trabalho. Estou trabalhando em um elemento TD.
fonte
$("#elementId").click(function(){//Event execution code goes here});
para que ele não esteja na página html. Para limpar que realmente precisa para uso.unbind()
, ou o preferido.off()
unbind
eoff
não estava resolvendo o problema. Muito obrigado!Se o evento for anexado dessa maneira , e o destino deve ser desanexado:
fonte
Você pode adicionar o
onclick
manipulador como marcação embutida:Se sim, o jquery
.off()
ou.unbind()
não funcionará. Você também precisa adicionar o manipulador de eventos original no jquery:Em seguida, o jquery tem uma referência ao manipulador de eventos e pode removê-lo:
O VoidKing menciona isso um pouco mais obliquamente no comentário acima.
fonte
Atualizado para 2014
Usando a versão mais recente do jQuery, agora você pode desvincular todos os eventos em um espaço para nome simplesmente executando
$( "#foo" ).off( ".myNamespace" );
fonte
A melhor maneira de remover o evento onclick embutido é
$(element).prop('onclick', null);
fonte
Para
remove
TODOSevent-handlers
, é isso que funcionou para mim:Remover todos os manipuladores de eventos significa ter a planície
HTML structure
sem todos osevent handlers
anexados aoelement
e aochild nodes
. Para fazer isso,jQuery's clone()
ajudou.Com isso, teremos o
clone
lugar dooriginal
semevent-handlers
nele.Boa sorte...
fonte
Obrigado pela informação. muito útil eu usei para bloquear a interação da página enquanto estava no modo de edição por outro usuário. Eu o usei em conjunto com o ajaxComplete. Não necessariamente o mesmo comportamento, mas um pouco semelhante.
fonte
No caso, o
.on()
método foi usado anteriormente com um seletor específico, como no exemplo a seguir:Ambos
unbind()
e.off()
métodos não são indo para o trabalho.No entanto, o método .undelegate () pode ser usado para remover completamente o manipulador do evento para todos os elementos que correspondem ao seletor atual:
fonte
Se você
$(document).on()
adicionar um ouvinte a um elemento criado dinamicamente, poderá ser necessário o seguinte para removê-lo:fonte
Isso também funciona bem. Simples e fácil. Consulte http://jsfiddle.net/uZc8w/570/
fonte
se você definir a
onclick
viahtml
precisaráremoveAttr ($(this).removeAttr('onclick'))
se você configurá-lo via jquery (como após o primeiro clique nos meus exemplos acima), será necessário
unbind($(this).unbind('click'))
fonte
Eu sei que isso chega tarde, mas por que não usar JS simples para remover o evento?
ou, se você usar uma função nomeada como manipulador de eventos:
fonte
Todas as abordagens descritas não funcionaram para mim porque eu estava adicionando o evento click
on()
ao documento em que o elemento foi criado em tempo de execução:Minha solução alternativa:
Como não pude desvendar a classe ".button", acabei de atribuir outra classe ao botão que tinha os mesmos estilos CSS. Ao fazer isso, o manipulador ao vivo / no evento ignorou o clique finalmente:
Espero que ajude.
fonte
Espero que meu código abaixo explique tudo. HTML:
fonte
})(jQuery);
entrando no IIFE quando ele já pode ser acessado globalmente?Simplesmente remova isso do botão:
fonte