manipulador preceder click Jquery
Pergunta
Se você conhece uma maneira melhor de fazer isso, então por favor me avise. Direito Eu tenho uma página que contêm grande quantidade de botões, gráficos e tabelas. Eu li sobre parar propogation evento e é isso que eu vou estar usando. Quero permitir que a ajuda em elementos Cerain. Eu tenho uma caixa de seleção que muda o cursor sobre ajuda habilitado divs. O que eu quero fazer é preceder uma função de ajuda antes que o comportamento normal clique.
Basicamente é assim.
<input type="button" value="Click me" onclick="alert ('hello')" />
o que eu quero é que, se a caixa de seleção é clicado eu adicionar uma classe css (já feito) e, em seguida, adicionar um manipulador de cliques antes do clique normal. Quando o elemento é clicado, em seguida, o helpfunction é executado eo manipulador de clique botão padrão não é acionado. Quando a caixa de ajuda está desmarcada Quero remover a função de ajuda. Eu percebo que eu poderia hardocde isso para cada elemento e tem um cheque no helperfunction para ver se a caixa está marcada. Mas eu prefiro uma maneira mais genérica de fazê-lo.
Graças
John
Solução
$(":button").each(function() {
// your button
var btn = $(this);
// original click handler
var clickhandler = btn.attr("onclick");
btn.attr("onclick", "return false;");
// new click handler
btn.click(function() {
if ($("#chkbox").attr("checked") == true) {
// TODO: show your help
// TODO: catch event
}
else {
clickhandler();
}
});
});
Outras dicas
Eu acho que você quer brincar com bind / unbind neste caso - veja http: / /docs.jquery.com/Events/unbind#typefn
ao selecionar a caixa de seleção você pode vincular novos eventos de clique em seus botões - e desvincular-los mais tarde.
Você provavelmente também terá que trabalhar com event.preventDefault ( http: //docs.jquery .com / Eventos / jQuery.Event ), a fim de suprimir o comportamento padrão clique se você não quer que ele
Você usaria algo que o gosta de:
$("a").bind("click", function(event){
if ($("#helpcheckbox").attr('checked')
{
event.preventDefault();
// do something
}
});
Sem mais código é difícil para ser mais exato.