Jquery anteporre gestore click
Domanda
Se conoscete un modo migliore per fare questo allora per favore fatemelo sapere. Proprio Ho una pagina che conterrà un sacco di pulsanti, grafici e tabelle. Ho letto di fermare la propagazione evento ed è quello che userò. Voglio attivare aiuto su elementi cerain. Ho una casella di controllo che cambia il cursore su di aiuto attivato div. Quello che voglio fare è anteporre una funzione di aiuto prima che il normale comportamento del clic.
In sostanza è come questo.
<input type="button" value="Click me" onclick="alert ('hello')" />
Quello che voglio è che se la casella di controllo viene cliccato aggiungo una classe CSS (già fatto) e poi aggiungo un gestore di click prima del normale scatto. Quando l'elemento viene cliccato poi il helpfunction viene eseguito e il gestore Fare clic sul pulsante di default non viene generato. Quando la casella è selezionata aiuto Voglio rimuovere la funzione di aiuto. Mi rendo conto che avrei potuto hardocde questo per ogni elemento e avere un controllo nel helperfunction per vedere se la casella è selezionata. Ma io preferirei un modo più generico di farlo.
Grazie
Giovanni
Soluzione
$(":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();
}
});
});
Altri suggerimenti
Penso che si desidera giocare con bind / svincolare in questo caso - vedi http: / /docs.jquery.com/Events/unbind#typefn
quando si seleziona la casella di controllo è possibile associare nuovi eventi click sui tasti - e separare in seguito.
Probabilmente si dovrà anche lavorare con Event.preventDefault ( http: //docs.jquery .com / Eventi / jQuery.Event ) al fine di sopprimere il comportamento predefinito click se non volete che
Si potrebbe usare qualcosa del calibro di:
$("a").bind("click", function(event){
if ($("#helpcheckbox").attr('checked')
{
event.preventDefault();
// do something
}
});
Senza più codice è difficile essere più precisi.